Python-基本授权(OAuth2.0)从API检索访问令牌



我正在尝试使用以下必需信息从API生成访问令牌:

授权端点:https://api.paylocity.com/indistityserver/connect/token

授权标题预计该请求将以基本身份验证请求的形式,其中包含客户端ID和客户端销售的"授权"标头。这意味着标准的基本-64编码用户:密码,前缀为"基本"作为授权标头的值,其中用户是客户端ID,并且密码是客户端销售。

内容类型的标题" content-type"标头必须为"应用程序/x-www-form-urlenCoded"。

其他值该请求必须在请求正文中发布以下表格编码值:

grant_type = client_credentials范围= weblinkapi

我尝试使用python的"请求"软件包而没有成功,请参见:

import requests
url = "https://api.paylocity.com/IdentityServer/connect/token"
headers = {
    'Authorization': "Basic **********:**********",
    'Content-Type': "application/x-www-form/urlencoded"
    }
body = {
    'grant_type': "client_credentials",
    'scope': 'WebLinkAPI'
}
response = requests.request("POST", url, headers=headers, params=body)
print(response.text)

而不是访问令牌,我会收到一条错误消息:

{" error":" invalid_client"}

我已经验证了我的base64编码用户名和密码是正确的,它看起来像是" g/andant:morerandom ==",当我将它们添加到Postman中时,它可以正常工作,因此我的凭据是正确的。怎么了?

我解决了这个问题。有两个问题,授权标题没有使用ASCII作为带有Base64编码的目标charset。另一个问题是试图将附加值添加到请求包中的参数而不是正体中。解决方案是用"数据"替换"参数"。这是解决方案:

url = "https://api.paylocity.com/IdentityServer/connect/token"
body = "grant_type=client_credentials&scope=WebLinkAPI"
headers = {
    'Content-Type': "application/x-www-form-urlencoded",
    'Authorization': "Basic ***(base64ASCII)username:password***",
    }
response = requests.request("POST", url, data=body, headers=headers)
print(response.text)

相关内容

  • 没有找到相关文章