当前位置: 首页 > 知识库问答 >
问题:

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

东方宜
2023-03-14

我正在使用Spotify API开发一个应用程序,但我对这一切还是有点陌生。我正在尝试获取用于代码交换(PKCE)的带验证密钥的授权代码(https://developer.spotify.com/documentation/general/guides/authorization-guide/#authorization-代码流和代码交换pkce的验证密钥)我的问题是如何将用户重定向到查询,在那里他必须接受授权,并让我的应用程序等待用户单击ACCEPT。当他这样做时,用户将被重定向,新的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)

共有1个答案

程仲卿
2023-03-14

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

我编写了一个Spotify Web API客户端,其内部结构可能对您的检查很有用。例如,您可以使用Flask来构建服务器。主要原理是使用一个endpoint(即/login)将用户重定向(code307对我有用,浏览器不会记得它)到回调(即/call back),该回调接收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)
 类似资料:
  • 介绍 除了内置的 用户认证 服务之外, Lumen 还提供了用户授权和资源访问控制的方案。有很多种方法与辅助函数能帮你处理授权逻辑。 总的来说,Lumen 中的使用和 Laravel 大同小异,我们会在这个文档中指出不同的地方,完整的用户授权文档还需要查阅 Laravel 授权文档 。 与 Laravel 的不同 定义权限 与 Laravel 相比,Lumen 的用户授权的不同之处在于如何定义权限

  • 为了请求访问令牌,客户端从资源所有者获得授权。授权表现为授权许可的形式,客户端用它请求访问令牌。OAuth定义了四种许可类型:授权码、隐式许可、资源所有者密码凭据和客户端凭据。它还提供了扩展机制定义其他许可类型。

  • 我在springboot springSecurity oauth2中有一个项目,该项目工作正常。我想在这个项目中添加KeyClope。我想在我的项目中授权用户,并从KeyClope获得。这可能吗?

  • 概述 1、用户对开发者进行应用授权后,开发者可以帮助用户完成相应的业务逻辑。 2、授权采用标准的OAuth 2.0流程。 授权流程 快速接入 第一步:应用授权URL拼装 拼接规则: http://openauth.yourdomain.com/oauth2/appToAppAuth?app_id=2019032617262200001&redirect_uri=http%3a%2f%2flocal

  • 我希望某些元素在前端只显示给特定的用户(而不是任何具有特定角色的用户)。 为什么这个工作: 但这并不是: Sanoja是模型中的一个属性。它是一个@实体: 错误: Whitelabel错误页此应用程序没有 /error的显式映射,因此您将此视为一个后备选项。

  • 主要内容:权限类型说明授权就是为某个用户赋予某些权限。例如,可以为新建的用户赋予查询所有数据库和表的权限。MySQL 提供了 GRANT 语句来为用户设置权限。 在 MySQL 中,拥有 GRANT 权限的用户才可以执行 GRANT 语句,其语法格式如下: 其中: priv_type 参数表示权限类型; columns_list 参数表示权限作用于哪些列上,省略该参数时,表示作用于整个表; database.table