python:如何从桌面应用重定向到url,等待用户接受授权并获取授权代码
我正在使用Spotify API开发一个应用程序,但我对所有这些都有点陌生。我正在尝试使用代码交换验证密钥(PKCE)()获取授权代码 我的问题是如何将用户重定向到python:如何从桌面应用重定向到url,等待用户接受授权并获取授权代码,python,authentication,oauth-2.0,authorization,spotify,Python,Authentication,Oauth 2.0,Authorization,Spotify,我正在使用Spotify API开发一个应用程序,但我对所有这些都有点陌生。我正在尝试使用代码交换验证密钥(PKCE)()获取授权代码 我的问题是如何将用户重定向到查询,在那里他必须接受授权,并让我的应用程序等待用户单击“接受”。当他这样做时,用户将被重定向,新的URL(正如文档所说)将包含授权代码,然后我需要将其交换为授权令牌 这是我到目前为止获取授权代码的功能: def get_auth_code(self): code\u challenge=self.get\u code\u chall
查询
,在那里他必须接受授权,并让我的应用程序等待用户单击“接受”。当他这样做时,用户将被重定向,新的URL(正如文档所说)将包含授权代码,然后我需要将其交换为授权令牌
这是我到目前为止获取授权代码的功能:
def get_auth_code(self):
code\u challenge=self.get\u code\u challenge\u PKCE()
scopes_needed=“用户读取电子邮件%20用户读取专用%20播放列表读取协作%20播放列表修改公用%20播放列表读取专用%20播放列表修改专用%20用户库修改%20用户库读取”
端点=”https://accounts.spotify.com/authorize"
query=f“{endpoint}?client\u id={self.client\u id}&response\u type=code&redirect\u uri={self.redirect\u uri}&scope={scopes\u needed}&code\u challenge\u method=S256&code\u challenge={code\u challenge}”
webbrowser.open(查询)
设置web服务器。
要以编程方式提取访问令牌,您需要一个web服务器在用户登录Spotify(您将其重定向到Spotify)后处理重定向。现在,这个服务器可以是用户将URI粘贴到终端上的输入字段,但显然这对用户体验来说并不理想。它为许多错误留下了余地
我编写了一个Spotify Web API客户端,其内部可能对您的检查很有用,您可以使用Flask构建服务器。主要原则是使用一个端点(即/login
)将用户重定向到回调(即/callback
),该回调接收code
参数,您可以使用该参数请求访问令牌
我知道,在本地实现OAuth2可能有点困难。在我的库中,我还提出了一个建议,您正在使用webbrowser
构建,但它确实有手动复制粘贴的怪癖。为了简洁起见,您可以定义自己使用的函数,其要点如下:
verifier = secrets.token_urlsafe(32) # for PKCE, not in my library yet
url = user_authorisation_url(scope, state, verifier)
# Communicate with the user
print('Opening browser for Spotify login...')
webbrowser.open(url)
redirected = input('Please paste redirect URL: ').strip()
code = parse_code_from_url(redirected)
state_back = parse_state_from_url(redirected)
assert state == state_back # For that added security juice
token = request_user_token(code, verifier)
是的,我做了类似的事情,但最后我决定再搜索一点,创建一个基本服务器,这样我就可以得到响应,它工作得“kindda”很好。仍在进行一些改进