gpt4 book ai didi

amazon-web-services - Multi-Tenancy Web 应用程序上的 AWS Cognito 用户池

转载 作者:行者123 更新时间:2023-12-01 04:30:53 25 4
gpt4 key购买 nike

我们有一个 .net Core MVC Web 应用程序,可供多个客户使用。每个客户将拥有多个用户。

我们打算使用 AWS Cognito 进行用户身份验证并阅读此内容,我发现每个客户的用户池是推荐的路线之一。这适用于我们的用例,因为客户 A 可能想要一个用户名为“Bob”的用户,而客户 B 可能想要另一个用户名为“Bob”的用户。

我读过的所有内容都表明这应该是可能的,但问题是:

在 .net core 中,我必须在启动时指定特定于特定应用程序池的一些详细信息:

                .AddOpenIdConnect(async options =>
{
options.ResponseType = OpenIdConnectResponseType.Code;

options.ConfigurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(
services.BuildServiceProvider().GetService<IOpenIdDiscovery>().OpenIdConfigurationUrl(),
new OpenIdConnectConfigurationRetriever(),
services.BuildServiceProvider().GetService<System.Net.Http.HttpClient>());

options.Authority = Configuration["OpenIdAuthority"];
options.ClientId = Configuration["AuthCodeClientId"];
options.ClientSecret = Configuration["AuthCodeClientSecret"];

如何让应用程序使用多用户池?

为了详细说明上述内容,我认为理想的解决方案是:

1) 我们将用户定向到其用户池的特定登录 URL。
2) 登录后用户被重定向到中心站点。
3)我们以某种方式检测他们通过哪个用户池进行身份验证,并相应地为 session 设置 ClientId 和 ClientSecret。

最佳答案

这周我不得不解决一个类似的问题。显然 .NET Core 不支持开箱即用,因为在处理基于 GUI 的网站时,它可能会引发一些关于身份验证挑战的棘手问题:https://github.com/aspnet/Security/issues/1847

然而,我是在 API 服务器的上下文中解决这个问题的,并且很容易做出一些基本假设。

我最终通过实现我自己的 JwtBearerHandler 解决了它与 .NET Core 大致相同的类,但重新配置了 JwtBearerOptions基于 HTTP 请求中的信息动态。可以在此处找到最相关的更改:https://github.com/tgittos/AmazonCognitoPrototype/blob/master/AmazonCognitoSpike/Auth/CognitoUserPoolResolver.cs

基本上,解决方案的要点是从 JwtBearerHandler 中的请求中提取一个标识符。并使用它来重新配置 AudienceAuthorityJwtBearerOptions基于请求传入时存储在数据库中的内容。它不会为请求增加大量开销,并且似乎工作得很好。

我链接的整个 repo 是我致力于让 Cognito auth 与多个用户池一起工作的概念验证,因此可能值得花一些时间阅读这些内容。它非常困惑,包括我不需要替换的类。核心变化在CognitoUserPoolResolver , DSJwtBearerHandlerDSJwtBearerOptions .

关于amazon-web-services - Multi-Tenancy Web 应用程序上的 AWS Cognito 用户池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54406290/

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