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

2024-09-28 23:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Spotify API开发一个应用程序,但我对所有这些都有点陌生。我正在尝试使用代码交换(PKCE)的验证密钥获取授权代码(https://developer.spotify.com/documentation/general/guides/authorization-guide/#authorization-code-flow-with-proof-key-for-code-exchange-pkce) 我的问题是如何将用户重定向到query,在那里他必须接受授权,并使我的应用程序等待用户单击“接受”。当他这样做时,用户将被重定向,新的URL(正如文档所说)将包含授权代码,然后我需要将其交换为授权令牌

这是我到目前为止获取授权代码的功能:

def get_auth_code(self):
    code_challenge = self.get_code_challenge_PKCE()
    scopes_needed = "user-read-email%20user-read-private%20playlist-read-collaborative%20playlist-modify-public%20playlist-read-private%20playlist-modify-private%20user-library-modify%20user-library-read"

    endpoint = "https://accounts.spotify.com/authorize"
    query = f"{endpoint}?client_id={self.client_ID}&response_type=code&redirect_uri={self.redirect_uri}&scope={scopes_needed}&code_challenge_method=S256&code_challenge={code_challenge}"
    webbrowser.open(query)

Tags: 代码用户httpsselfcom应用程序readget
1条回答
网友
1楼 · 发布于 2024-09-28 23:18:16

设置web服务器。

要以编程方式提取访问令牌,您需要一个web服务器在用户登录Spotify(您将其重定向到Spotify)后处理重定向。现在,这个服务器可以成为将URI粘贴到终端上输入字段的用户,但显然这对用户体验并不理想。它为许多错误留下了余地

我编写了一个SpotifyWebAPI客户机,其内部可能对您的检查很有用For example,您可以使用Flask构造服务器。主要原则是使用一个端点(即/login)将用户重定向(代码307用于浏览器不会记住它)到回调(即/callback),该回调接收code参数,您可以使用该参数请求访问令牌

我知道,在本地实现OAuth2可能有点困难。在我的库中,我还制作了一个similar function,您正在使用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)

相关问题 更多 >