Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python-从API检索访问令牌的基本授权(OAuth2.0)_Python 3.x_Api_Oauth 2.0_Python Requests_Authorization - Fatal编程技术网

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

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

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

授权端点:

授权头 该请求应采用基本身份验证请求的形式,其中“授权”头包含客户机id和客户机机密。这意味着标准的base-64编码user:password,前缀为“Basic”作为授权头的值,其中user是客户机id,password是客户机机密

内容类型标题 “内容类型”标题必须是“application/x-www-form-urlencoded”

其他价值观 请求必须在请求正文中发布以下表单编码值:

授予\类型=客户端\凭据 范围=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)
我收到的不是访问令牌,而是一条错误消息:

{“错误”:“无效的_客户端”}


我已经验证了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)