我正在尝试使用以下必需信息从API生成访问令牌:
授权端点:https://api.paylocity.com/IdentityServer/connect/token
授权标头 该请求应采用基本身份验证请求的形式,其中“ Authorization”标头包含客户端ID和客户端秘密。这意味着标准的base-64编码的user:password,以“ Basic”作为Authorization标头的值,其中user是客户ID,密码是客户秘密。
内容类型标题 “ Content-Type”标头必须为“ application / x-www-form-urlencoded”。
其他值 该请求必须在请求正文中发布以下表单编码值:
grant_type = client_credentials scope = WebLinkAPI
我尝试使用Python'requests'软件包失败,请参见下文:
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)
我收到一条错误消息,而不是访问令牌:
{“错误”:“ invalid_client”}
我已经验证我的base64编码的用户名和密码正确无误,它看起来像“ G / RaNdOm:MoReRaNdOm ==”,并且当我将它们添加到邮递员时,它可以正常工作,因此我的凭据是正确的。怎么了?
答案 0 :(得分:0)
我解决了这个问题。有两个问题,授权标头未使用ASCII作为具有base64编码的目标字符集。另一个问题是尝试将附加值添加到参数中,而不是在请求包中添加正文。解决的办法是用“数据”代替“参数”。解决方法如下:
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)