Python 3.x Python-从API检索访问令牌的基本授权(OAuth2.0)
我正在尝试使用以下必需信息从API生成访问令牌: 授权端点: 授权头 该请求应采用基本身份验证请求的形式,其中“授权”头包含客户机id和客户机机密。这意味着标准的base-64编码user:password,前缀为“Basic”作为授权头的值,其中user是客户机id,password是客户机机密 内容类型标题 “内容类型”标题必须是“application/x-www-form-urlencoded” 其他价值观 请求必须在请求正文中发布以下表单编码值: 授予\类型=客户端\凭据 范围=WebLinkAPI 我尝试过使用Python“requests”包,但没有成功,请参见以下内容:Python 3.x Python-从API检索访问令牌的基本授权(OAuth2.0),python-3.x,api,oauth-2.0,python-requests,authorization,Python 3.x,Api,Oauth 2.0,Python Requests,Authorization,我正在尝试使用以下必需信息从API生成访问令牌: 授权端点: 授权头 该请求应采用基本身份验证请求的形式,其中“授权”头包含客户机id和客户机机密。这意味着标准的base-64编码user:password,前缀为“Basic”作为授权头的值,其中user是客户机id,password是客户机机密 内容类型标题 “内容类型”标题必须是“application/x-www-form-urlencoded” 其他价值观 请求必须在请求正文中发布以下表单编码值: 授予\类型=客户端\凭据 范围=Web
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)
我收到的不是访问令牌,而是一条错误消息:
{“错误”:“无效的_客户端”}
我已经验证了base64编码的用户名和密码是正确的,它看起来像“G/RaNdOm:MoReRaNdOm==”,当我将它们添加到postman时,它会工作,因此我的凭证是正确的。有什么问题吗?我解决了这个问题。有两个问题,授权标头未使用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)