带有 Auth0 的服务器端 id_token
Posted
技术标签:
【中文标题】带有 Auth0 的服务器端 id_token【英文标题】:Serverside id_token with Auth_0 【发布时间】:2018-05-17 18:01:46 【问题描述】:在使用基于令牌的身份验证时,我对在服务器端处理用户信息的方式感到有些困惑。
我正在使用 React 和 Flask 构建一个 RESTful 单页应用程序,我想使用身份验证提供程序作为 Auth0。
在我看来,这是用户的工作流程:
-
在客户端输入邮箱+密码
Auth0 确认并返回一个
jwt
存储在localStorage
当用户从我的服务器发布或获取数据时,jwt
会随请求一起发送
服务器使用 Auth0 检查此令牌是否有效
如果此令牌有效,则处理用户的请求
我不明白用户的数据如何适应这种模式,例如他们的电子邮件地址来记录我的数据库中的更改:
它是否在第 2 步返回(id_token
?)并且应该在第 3 步中作为声明传递?
还是应该在服务器检查收到的令牌时在第 4 步获取它?
感谢您的帮助!
【问题讨论】:
【参考方案1】:是的,如果您在 Auth0 中有客户端的默认设置,则有关用户的此信息应该在您的 id_token 中。如果您在 jwt.io
使用 JWT 调试器并将您的 id_token 粘贴到 encoded
部分,右侧将显示您的令牌的内容。
这基本上是对令牌进行解码。您必须在应用程序中执行相同的操作才能使用用户名、电子邮件、email_verified...
一种常见的做法是在用户登录时(在前端)解码一次令牌。将此信息存储在全局变量中,以便在整个应用程序中使用。
用于后端(Python),简单解码使用pyjwt解码令牌
您可能希望使用jsonwebtoken
库在前端处理解码。
【讨论】:
A common practice is to decode the token once (in the front end), when the user logs in. Store this information in a global variable so it's usable throughout your application.
-> 你的意思是我从 Auth0 得到id_token
,将它存储在localStorage
,解码一次(然后再次将它们保存在 localStorage 中),然后发送例如电子邮件名称等作为access_token
中的声明?
您可以将其存储在本地存储中,也可以将其存储在全局变量中。这取决于你。根据您的提供商(Google、Facebook 等),您需要指定范围。范围决定了您希望收到有关客户的哪些信息。请注意,他们会在注册时看到您要求的信息。
基本作用域的一个例子是openid, profile, email
。这将检索姓名、个人资料信息和电子邮件。在此处查看更多信息:auth0.com/docs/scopes/current以上是关于带有 Auth0 的服务器端 id_token的主要内容,如果未能解决你的问题,请参考以下文章
从现有的 id_token 获取 Auth0 access_token
在 ASP.NET Core API 中处理 id_token
如何强制Azure Active Directory身份验证服务重新发出带有更新声明的id_token?