gpt4 book ai didi

c# - IdentityServer4 - 根据 client_id 使用不同的用户存储

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:06 24 4
gpt4 key购买 nike

我正在使用 IdentityServer4 和 AspNetCore.Identity 创建身份服务。该服务将服务于需要有不同用户的多个网站。因此,我在想保持用户分离的最简单方法是在我的数据库(在我的例子中是 MongoDb)中有单独的用户集合,并简单地使用基于 client_id 的不同用户集合。 .

我正在注册我的 IUserRepository像这样:

services.AddSingleton<IUserRepository>(x => new UserRepository(mongoClient));

我在想实现我想要的最简单的方法是在 DI 级别处理它,所以到目前为止我想出的是将其更改为:

services.AddScoped<IUserRepository>(x => GetUserRepo(x, mongoClient));

在哪里GetUserRepo是一种读取 client_id 的方法在请求之外并返回正确用户集合的存储库。

这似乎确实有效,但我的问题是 GetUserRepo 的实现有多“老套”必须是:

  1. 我必须检查请求 url 是否为 /connect/token如果是,请手动读取请求正文以找到 client_id
  2. 如果用户正在传递 Bearer token (我的身份服务还包括用于创建用户等的管理 API),那么我必须手动解码 token 并找到 client_id claim

真的,我只是想知道是否有更好的方法来做到这一点(IdentityServer4 提供的任何东西?)以及这样做是否“可以”?

我发现唯一可能有帮助的是 IIdentityServerInteractionService.GetAuthorizationContextAsync然而这需要 returnUrl我没有,因为我正在使用客户端凭据或资源所有者密码凭据方法进行身份验证。

最佳答案

不是具体的答案,但它可能有助于让其他人走上正轨:

在更仔细地考虑了我们的场景之后,我意识到没有必要做我想做的事情。相反,每个网站将简单地使用 AspNetCore.Identity 来处理他们自己的用户(使用他们自己的数据存储),而我只是使用 IdentityServer 来保护我的 API 并设置每个网站作为客户。

关于c# - IdentityServer4 - 根据 client_id 使用不同的用户存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57426765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com