如何在 Auth0 Python 网络应用程序中获取 JWT?

How to get JWT in Auth0 Python web app?

我以这个项目为起点:https://github.com/auth0-samples/auth0-python-web-app

根据 https://auth0.com/docs/tokens/access-token,如果我将 audience 设置为 URL 指向自定义 API. 这正是我所做的,但我仍然只得到一个不透明的访问令牌,好像观众仍然会指向 abc.eu.auth0.com/userinfo

我想知道,我是否需要做其他事情来获取 JWT?

我已经尝试添加 "access_token_params":

 auth0 = oauth.remote_app(
    'auth0',
    consumer_key=AUTH0_CLIENT_ID,
    consumer_secret=AUTH0_CLIENT_SECRET,
    access_token_params={
        'scope': 'openid profile',
        'audience': AUTH0_AUDIENCE
    },
    request_token_params={
        'scope': 'openid profile',
        'audience': AUTH0_AUDIENCE
    },
    base_url='https://%s' % AUTH0_DOMAIN,
    access_token_method='POST',
    access_token_url='/oauth/token',
    authorize_url='/authorize',
)

遗憾的是,没有成功。如果你能给我一些我可能错过的提示,我会很高兴。

不需要 remote_app 定义中的 access_token_parameters 参数。

在您的回调路由中,代码应如下所示:

@app.route('/auth/callback/')
def auth_callback():
    response = auth0.authorized_response()
    print(response.get("id_token"))

此调用中的 response 是一个字典,其中包含 access_token 以及 id_tokenJWT

如果您打算从此 JWT 中获取信息,您需要使用适当的第 3 方库对其进行解析。有几个可用...您也可以通过此网站验证令牌(例如查看内容):

https://jwt.io/ (将上面 "print" 命令的输出粘贴到调试器中)

此站点上的 JWT 调试器下方还有一个 python 库及其功能列表。

它大致包含与您交换 access_token/userinfo/ 端点以获取用户配置文件时获得的相同信息。

还有...

我发现,当我从使用 Lock 库切换到 Flask-OAuthlib 库时,我需要将 "email" 添加到范围参数中。这取决于您允许的连接类型,但我的范围现在看起来像:"openid profile email"