【问题标题】:Auth0 PKCE Grant Can't verify code verifierAuth0 PKCE Grant 无法验证代码验证器
【发布时间】:2018-09-01 07:40:46
【问题描述】:

我有一个想要使用 Auth0 授权的客户端应用程序,并且我正在使用此处描述的工作流程:

https://auth0.com/docs/api-auth/tutorials/authorization-code-grant-pkce

唯一的问题是我使用的是 python,所以我编写了自己的挑战/验证器对。

def base64URLEncode(random_bytes):
    return urlsafe_b64encode(random_bytes)


def sha256(buffer):
    m = hashlib.sha256()
    m.update(buffer)
    return m.digest()

verifier = base64URLEncode(secrets.token_bytes(32))
challenge = base64URLEncode(sha256(verifier))

该应用程序是一个 Flask 命令行应用程序,它打开一个页面供用户在其网络浏览器中使用 google 登录,然后侦听重定向 URI 以获取响应代码。

我这样构造 URL 来启动授权:

url = DOMAIN + urllib.parse.urlencode(params)
webbrowser.open(url)

我从谷歌登录取回代码,但是当我尝试用代码交换访问令牌时:

payload = {
    'grant_type': 'authorization_code',
    'client_id': CLIENT_ID,
    'code_verifier': verifier,
    'code': code,
    'redirect_uri': 'http://localhost:5001/get_code'
}
res = requests.post("https://cidc-test.auth0.com/oauth/token", json=payload)

我收到以下类型的错误:

{'error': 'invalid_grant', 'error_description': 'Failed to verify code verifier'}

我不确定为什么验证器不好,因为在本地检查它,验证器摘要到与挑战相同的值。

【问题讨论】:

    标签: python oauth auth0


    【解决方案1】:

    好的,事实证明这是 Auth0 的一个特定问题,Auth0 不希望 base64 编码字符串末尾的填充字符。我的代码一旦添加就可以工作。

    【讨论】:

    • 我现在面临着类似的问题。我不完全确定这对你有什么影响。 url 编码应该已经删除了 Base64 字符串末尾的填充。所以我想你指的是别的东西。非常感谢您提供指向您所做更改的指针!
    • @AndreasBaumgart 简而言之,您必须将“+”的任何实例替换为“-”,将“/”的任何实例替换为“-”,并将“=”的任何实例替换为空,所以在python中trimmed = code.replace('+', '-').replace('/', '-').replace('=', '').encode('utf-8')
    • .Replace('+', '-').Replace('/', '_').Replace("=", "") 帮助了我。使用tonyxu-io.github.io/pkce-generator作为验证工具。
    猜你喜欢
    • 2018-11-11
    • 2021-12-15
    • 2022-11-22
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多