Python 授权授权可以';验证码验证器

Python 授权授权可以';验证码验证器,python,oauth,auth0,Python,Oauth,Auth0,我有一个客户端应用程序,我想使用Auth0对其进行授权,我正在使用下面描述的工作流: 唯一的问题是我正在使用python,因此我编写了自己的挑战/验证程序对 def base64URLEncode(random_bytes): return urlsafe_b64encode(random_bytes) def sha256(buffer): m = hashlib.sha256() m.update(buffer) return m.digest() v

我有一个客户端应用程序,我想使用Auth0对其进行授权,我正在使用下面描述的工作流:

唯一的问题是我正在使用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)
但是,当我尝试将代码交换为访问令牌时,我会从google登录返回代码:

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'}

我不知道为什么验证器是坏的,因为在本地检查它,验证器会将其分解为与质询相同的值。

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

我现在面临着一个类似的问题。我不完全确定这对你有什么影响。url编码应该已经删除Base64字符串末尾的填充。我想你指的是别的东西。如果您能提供一个指向您所更改内容的指针,我们将不胜感激@AndreasBaumgart简单地说,您必须将“+”的任何实例替换为“-”,将“/”的任何实例替换为“-”,并将“=”的任何实例替换为零,因此在python中,trimmed=code.replace(“+”,“-”).replace(“/”,“-”).replace(“=”,”).encode('utf-8')
.replace(“+”,“-”).replace(“/”,“).replace(“=”,”)
帮助了我。用作验证工具。