python - 如何在 Auth0 Python Web 应用程序中获取 JWT?

标签 python flask auth0

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

根据https://auth0.com/docs/tokens/access-token ,如果我将受众设置为指向自定义 API 的 URL,我应该会获得 JWT。 这正是我所做的,但我仍然只得到一个不透明的访问 token ,就好像观众仍然会指向 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"))

此调用的响应是一个字典,其中包含access_token以及id_token,即JWT

如果您打算从此 JWT 获取信息,您需要使用适当的第三方库来解析它。有几种可用...您还可以通过此网站验证 token (例如查看内容):

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

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

它大致包含与您与 /userinfo/ 端点交换 access_token 以获取用户个人资料时获得的相同信息。

还有...

我发现,当我从使用 Lock 库切换到 Flask-OAuthlib 库时,我需要将“电子邮件”添加到范围参数中。这取决于您允许的连接类型,但我的范围现在如下所示:“openid profile email”

关于python - 如何在 Auth0 Python Web 应用程序中获取 JWT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48956909/

相关文章:

angular - 使用 angular 2+ 的社交登录时,信息以何种方式在组件之间传递?

python - Python中global关键字的使用

javascript - Auth0 授权者拒绝来自服务的 JWT token - "jwt issuer invalid. expected: https://myservice.auth0.com"

Python 按日期和时间对 CSV 进行排序

python - Azure Flask 部署 - WSGI 接口(interface)

python - 使用 Flask-python/jinja 等待 X 秒后页面重定向

python - 处理 flask 装饰器的错误

jwt - Auth0 JWT 中的 "Sub"声明是否总是唯一的?

Python 列表列表操作

python - 检查输入是字符串列表/元组还是单个字符串