Auth0 API 无法看到使用 Python 请求提交的 URI 参数
Auth0 API can't see URI parameter submitted with Python Requests
我正在尝试使用 PKCE authentication flow 从 Python 脚本针对 Auth0 进行身份验证,但我收到一条错误消息,指出 Auth0 无法准确地看到我的 URI 参数之一.
<> 表示缺少与正在测试的身份验证交换相关的常量。
import requests
import urllib.parse
def process_auth_callback(authorization_code, callback_uri):
payload = {
'grant_type': 'authorization_code',
'client_id': <<AUTH CLIENT ID>>,
'code_verifier': <<CODE VERIFIER>>,
'code': authorization_code,
'redirect_uri': urllib.parse.quote(callback_uri)
}
r = requests.post('https://<<APP ID>>.us.auth0.com/oauth/token', data=payload)
print(r.request.body)
print(r.text)
process_auth_callback(<<AUTHORIZATION CODE>>, 'http://localhost:1234/login')
我从 Auth0 的 API 那里得到错误:
{"error":"unauthorized_client","error_description":"The redirect URI is wrong. You sent null//null, and we expected http://localhost:1234"}
然而,请求正文打印如下:grant_type=authorization_code&client_id=<<AUTH CLIENT ID>>&code_verifier=<<CODE VERIFIER>>&code=<<AUTHORIZATION CODE>>&redirect_uri=http%253A%2F%2Flocalhost%253A1234%2Flogin
这似乎包含正确的重定向 URI,所以我不确定 API 为何报告 null//null
。这是我如何使用请求的问题吗?还有别的吗?
啊,没多久我就找到了自己的答案
关键是传出请求正文中URI编码中的%253A
。 (参见 this answer)Python 的请求库已经是 URI-encoding 参数,因此我的 URI 编码 urllib.parse.quote(callback_uri)
然后在发送前的数据预处理期间再次编码。 Auth0 的 API 无法解析并将其处理为 null//null
.
我正在尝试使用 PKCE authentication flow 从 Python 脚本针对 Auth0 进行身份验证,但我收到一条错误消息,指出 Auth0 无法准确地看到我的 URI 参数之一.
<
import requests
import urllib.parse
def process_auth_callback(authorization_code, callback_uri):
payload = {
'grant_type': 'authorization_code',
'client_id': <<AUTH CLIENT ID>>,
'code_verifier': <<CODE VERIFIER>>,
'code': authorization_code,
'redirect_uri': urllib.parse.quote(callback_uri)
}
r = requests.post('https://<<APP ID>>.us.auth0.com/oauth/token', data=payload)
print(r.request.body)
print(r.text)
process_auth_callback(<<AUTHORIZATION CODE>>, 'http://localhost:1234/login')
我从 Auth0 的 API 那里得到错误:
{"error":"unauthorized_client","error_description":"The redirect URI is wrong. You sent null//null, and we expected http://localhost:1234"}
然而,请求正文打印如下:grant_type=authorization_code&client_id=<<AUTH CLIENT ID>>&code_verifier=<<CODE VERIFIER>>&code=<<AUTHORIZATION CODE>>&redirect_uri=http%253A%2F%2Flocalhost%253A1234%2Flogin
这似乎包含正确的重定向 URI,所以我不确定 API 为何报告 null//null
。这是我如何使用请求的问题吗?还有别的吗?
啊,没多久我就找到了自己的答案
关键是传出请求正文中URI编码中的%253A
。 (参见 this answer)Python 的请求库已经是 URI-encoding 参数,因此我的 URI 编码 urllib.parse.quote(callback_uri)
然后在发送前的数据预处理期间再次编码。 Auth0 的 API 无法解析并将其处理为 null//null
.