带有 Auth0 的服务器端 id_token

Posted

技术标签:

【中文标题】带有 Auth0 的服务器端 id_token【英文标题】:Serverside id_token with Auth_0 【发布时间】:2018-05-17 18:01:46 【问题描述】:

在使用基于令牌的身份验证时,我对在服务器端处理用户信息的方式感到有些困惑。

我正在使用 ReactFlask 构建一个 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

如何使用 Nuxtjs 实现 Auth0 服务器端?

如何强制Azure Active Directory身份验证服务重新发出带有更新声明的id_token?

未定义 Gridsome 服务器端渲染与窗口中断的 Auth0 身份验证

如何使用 Spring 从 id_token 创建用户?