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

Posted

技术标签:

【中文标题】如何使用 Spring 从 id_token 创建用户?【英文标题】:How to create a user from a id_token with Spring? 【发布时间】:2020-03-08 18:48:02 【问题描述】:

我正在构建一个后端带有弹簧的 SPA。我正在使用 Google 登录,其中大部分已经在工作:在前端获取带有隐式流的 id_token,然后我将其发送并在后端验证它。

我想让用户拥有角色并在本地进行管理(因此,不要在 oidc 提供程序中添加信息)。在春季从 id_token 到拥有经过身份验证的用户有哪些选择?我没有找到任何手动执行该链接的示例(id_token-spring_sec_user)。

我已经检查了几个来源,例如 SpringOne https://www.youtube.com/watch?v=WhrOCurxFWU 上的 Spring Security 5 演示文稿、几个 SO 问题以及 okta 和 auth0 的博客上的帖子,但我仍然缺少链接。

【问题讨论】:

【参考方案1】:

您必须创建自己的(应用程序)特定角色。

使用这些步骤:

    从 Google 获得身份验证 从谷歌访问个人资料部分(用户名、姓名等) 使用您自己的用户表来存储此信息 在您自己的系统中创建管理 API,并将您的应用特定角色分配给用户。 当您再次登录时,您将根据 google 登录名/密码和特定于您的应用程序的角色进行身份验证。

【讨论】:

很公平,这就是我最终所做的。你有没有看到任何关于如何做到这一点的博客或例子?当我没有找到任何东西时,这让我怀疑。 没有找到任何教程。但是,这应该很容易,因为您只会在首次登录时为用户分配默认角色。稍后管理员(使用管理员 API)可以更改(添加新角色)给用户。您需要做的就是实现自己的身份验证提供程序。【参考方案2】:

使用 id_token

创建帐户或会话

检查用户是否已经在您的用户数据库中。如果是这样,为用户建立一个经过身份验证的会话。如果用户尚未在您的用户数据库中,请使用 ID 令牌有效负载中的信息创建具有默认角色的新用户记录,并为用户建立会话。当您在应用中检测到新创建的用户时,您可以提示用户提供您需要的任何其他个人资料信息。

【讨论】:

以上是关于如何使用 Spring 从 id_token 创建用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 'id_token'、'access_token'、expiry 等直接创建 userManager?

Google OpenID Connect:如何验证 id_token?

Python 如何从使用 oauthlib 的帐户身份验证获取 ID_Token 以与 Open ID Connect 一起使用

如何使用 id_token 从 Azure Function 应用程序获取 Azure access_token?

使用 Keycloak 获取 id_token

自定义属性未传递到由 AWS Cognito 创建的 ID_TOKEN