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.