Auth0 PKCE Grant无法验证代码验证程序

时间:2018-03-22 18:25:08

标签: python oauth auth0

我有一个客户端应用程序,我想使用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命令行应用程序,它打开一个页面供用户在其Web浏览器中使用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'}

我不确定为什么验证程序不好,因为在本地检查它,验证程序会消化到与挑战相同的值。

1 个答案:

答案 0 :(得分:0)

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