Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:如何从桌面应用重定向到url,等待用户接受授权并获取授权代码_Python_Authentication_Oauth 2.0_Authorization_Spotify - Fatal编程技术网

python:如何从桌面应用重定向到url,等待用户接受授权并获取授权代码

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

我正在使用Spotify API开发一个应用程序,但我对所有这些都有点陌生。我正在尝试使用代码交换验证密钥(PKCE)()获取授权代码 我的问题是如何将用户重定向到
查询
,在那里他必须接受授权,并让我的应用程序等待用户单击“接受”。当他这样做时,用户将被重定向,新的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”很好。仍在进行一些改进