Spotify API 从 redirect_uri 获取授权码
Posted
技术标签:
【中文标题】Spotify API 从 redirect_uri 获取授权码【英文标题】:Spotify API fetch authorization code from redirect_uri 【发布时间】:2019-05-11 08:59:51 【问题描述】:我正在尝试为我的应用和我的 Spotify 帐户获得授权。不需要为每个用户在应用程序中工作的功能。因为还没有应用程序。只是想先尝试一些东西。现在我知道了spotipy,我可能应该使用这个库。起初,我尝试按照以下说明将链接粘贴到浏览器中。第一步工作正常。但是,当我尝试用令牌交换身份验证代码时,我总是遇到错误。我在想,身份验证代码的生命周期可能非常短,当我将身份验证代码粘贴到新链接中时总是为时已晚。
所以,问题是:我是否可以在执行 GET 请求后以某种方式获取出现在 redirect_uri 中的代码,然后将其作为参数之一传递给 POST 请求。
来自 spotify 的指南 - https://developer.spotify.com/documentation/general/guides/authorization-guide/#authorizaton-code-flow
import requests
import config
import secrets
import string
URL_AUTH = 'https://accounts.spotify.com/authorize'
URL_TOKEN = 'https://accounts.spotify.com/api/token'
symbols = string.ascii_lowercase + string.digits
STATE = ''.join(secrets.choice(symbols) for _ in range(12))
params_auth =
'client_id': config.CLIENT_ID,
'response_type': 'code',
'redirect_uri': 'https://example.com/callback',
'scope': 'user-read-currently-playing',
'state': STATE
data_token =
'grant_type': "authorization_code",
# how can I get the auth code 'code': auth_code,
'redirect_uri': 'https://example.com/callback',
'client_id': config.CLIENT_ID,
'client_secret': config.CLIENT_SECRET
app_auth = requests.get(url=URL_AUTH, params=params_auth)
access_token = requests.post(url=URL_TOKEN, data=data_token)
【问题讨论】:
令牌应该在您的获取请求的响应中 我试过 print(app_auth.content) 和 print(app_auth.text)。它不在那里。如果一切顺利,它应该在那里吗? @Jonathan R 得到这个yadi.sk/i/lbJyUIikLBxzBg 如果我测试正确,Response对象中没有当前页面的URL。仅链接到其他页面。尝试了其他一些域。 其实有一种获取token的方法,开发起来真的又快又简单,我完全忽略了。 【参考方案1】:https://accounts.spotify.com/authorize
不是您的程序要向其发出请求的地址。您应该在网络浏览器中打开此页面,以便您的用户登录并授予您的应用代表他们执行操作的权限。一旦用户完成,并且接受或拒绝了您的应用程序的许可请求,他们将被重定向到重定向 url,您将在其中收到一个授权码,您可以像您一样交换身份验证令牌和刷新令牌在您的第二个请求中。
整个授权代码流程记录在here。还值得看看隐式授予流程,它更简单一些,可能适合您的目的。
Spotipy 为这些身份验证流程内置了方法,因此您可能会发现使用该库更容易。
【讨论】:
感谢您的回答!我想知道有哪些选项可以让许多用户使用这个东西,这样他们就不必处理命令行、手动输入令牌等。只有一个 web 应用程序,例如用 Django 编写的?您可以在此处查看应用程序的基本结构:codereview.stackexchange.com/questions/209423/…。【参考方案2】:您应该尝试对授权进行编码并将其作为标头传递。
在分配的重定向页面上,您可以从 url 捕获 代码 并将其传递给将打印令牌的函数,如下所示:
def get_current_profile_token(code):
basic = self.client_id + ':' + self.client_secret
basic = base64.b64encode(basic.encode('ascii'))
response = requests.post(
url = 'https://accounts.spotify.com/api/token',
data=
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': self.redirect_url,
'scope': self.redirect_url,
,
headers=
"Authorization": "Basic " + basic.decode('ascii'),
,
verify=True
)
print(response.json())
return response.ok
【讨论】:
以上是关于Spotify API 从 redirect_uri 获取授权码的主要内容,如果未能解决你的问题,请参考以下文章