对身份提供商 (Auth0) 颁发的 idtoken 进行自定义 userId 声明

问题描述 投票:0回答:1

我的问题是是否可以将从我自己的数据库生成的用户 ID 添加为 ID 令牌中的自定义用户 ID 声明,该令牌由外部身份提供商签名和颁发。具体来说,我使用 Auth0 作为外部身份提供商。

我在 .NET 中有一个前端和一个后端,其中前端通过点击我的后端来启动 OpenID Connect 流,然后重定向到 Auth0 进行身份验证。用户登录或注册后,Auth0 会发出 ID 令牌,然后用户将被重定向回我的后端。检查 ID 令牌后,我看到 Auth0 生成的用户 ID 声明,但我需要添加从后端数据库生成的我自己的自定义用户 ID 作为 ID 令牌中的附加声明。

在.NET中,我尝试过挂钩各种事件,例如

OnTokenValidated
,但此时令牌已经被签名和发布,因此无法修改它。

我还阅读了 Auth0 的文档,其中建议使用

Actions
添加自定义声明。但是,由于我需要的声明对于每个用户来说都是唯一的,并且由我的应用程序生成,因此我必须 将我的本地计算机暴露到互联网,以允许 Auth0 操作检索此用户 ID 。我想在本地开发时避免暴露我的后端。

我正在寻找有关如何将此自定义用户 ID 声明添加到外部身份提供商颁发的 ID 令牌的建议,或者是否可能。 我已经提到了 Auth0,但如果有人解决了类似的问题,我愿意接受其他外部身份提供商的解决方案。

此外,我注意到在 .NET 中,有一个名为

RedirectToIdentityProvider

 的 OpenIdConnect 事件,我可以覆盖该事件。在这种情况下,我考虑生成一个自定义用户 ID,并在用户重定向到 Auth0 时将其作为参数传递。然后,我可能会从 Auth0 操作中读取此参数。然而,这种方法也没有意义,因为它会导致用户每次登录或注册时都会生成一个新的用户 ID。该用户 ID 只能在注册过程中生成一次,由 Auth0 处理。

c# asp.net-core security openid-connect auth0
1个回答
0
投票
添加从我自己的数据库生成的用户 ID 作为自定义用户 ID 声明 在 ID 令牌中......我需要的声明对于每个用户来说都是唯一的,并且 由我的应用程序生成

根据描述,流程应该是

1.点击你的应用程序

  1. 重定向到外部身份验证提供商以完成 OIDC 身份验证

  2. 重定向回您的应用程序以及当前用户的 id 令牌。

然后,由于自定义包含存储在数据库中的唯一用户信息,因此如果我们有解决方案将此声明添加到 OAuth 生成的 id 令牌中,我们必须知道前面的当前用户是谁,然后我们可以查询数据库获取自定义索赔值。在这种情况下,我们需要额外的步骤

  1. 了解当前用户是谁并从数据库获取所需的索赔值

  2. 返回外部身份提供商以重新生成包含自定义声明的新 ID 令牌。

如果是这样,即使有这样的方法,恐怕也不是一个好的选择。我认为将自定义声明值存储在像 Redis 这样的内存数据库中将是更好的选择。或者我们可以将声明放在访问令牌中,因为 Id 令牌用于身份验证,而访问令牌用于授权,也可以代表用户。

© www.soinside.com 2019 - 2024. All rights reserved.