在ASP.NET Core 3.1中,基于租户注册身份验证方案。

14

目前,我已经创建了一个使用外部登录提供程序和默认客户端 id 和密钥的 Identity Server 4 Web 应用程序。但我的目标是基于租户注册 Azure、Google 和 Facebook 等身份验证提供程序。

我使用了 SaasKit 多租户程序集,这里我尝试使用 app.usepertenant() 中间件。但 UseGoogleAuthentication() 方法已过时,因此我无法使用这个 usepertenant 中间件实现多租户身份验证。

当前代码:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
   .AddMicrosoftAccount(option =>
     {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
     });

预期的代码如下所示:

var authentication = services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);

if (tenant.hasMicrosoft)
{
   authentication.AddMicrosoftAccount(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

if (tenant.hasGoogle)
{
   authentication.AddGoogle(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

authentication.AddCookie( options =>
 {
    options.SlidingExpiration = true;
    options.ExpireTimeSpan = new TimeSpan(7, 0, 0, 0);
 });


也许您可以在此线程中找到答案或解决方法。 - user4864425
@RuardvanElburg,感谢您的回复。根据您建议的线程,我们可以在应用程序启动时基于租户更新已注册的方案选项。之后我们将无法更新它们。 - Madhan kumar D
你想针对每个租户设置不同的ClientId/ClientSecret吗?还是只想根据租户添加不同的身份验证方案? - Kirk Larkin
@KirkLarkin 针对不同的租户,使用相应的客户端ID/密钥进行身份验证。例如下面的代码:if (tenant.hasMicrosoft) { authentication.AddMicrosoftAccount(option => { option.ClientId = "clientid"; option.ClientSecret = "clientsecret"; option.SaveTokens = true; }); } - Madhan kumar D
这个有更新了吗? - Madhan kumar D
3个回答

3
请查看官方的MS文档:身份验证提供者
ASP.NET Core框架没有内置的解决方案来进行多租户身份验证,虽然客户可以使用内置功能编写解决方案,但我们建议客户了解Orchard Core这个用途。

你好,你能否找到任何关于Orchard Core的特定多租户身份验证示例?不确定MS在那个声明中意味着什么。 - ravi
我也在努力寻找这个例子。有什么进展吗? - javacavaj

0

由于身份验证需要在 DI 注册期间进行配置,因此您将不得不在身份验证注册期间通常设置所有外部登录提供程序。

在该步骤中,您需要添加所有方案。方案具有固定的客户端 ID/密钥,因此您需要使用支持所有客户端的所有外部登录提供程序凭据引导您的 IdentityServer。方案名称需要唯一。

例如,租户 A 可能具有方案“A_microsoft”,租户 B 可能具有方案“B_microsoft”等。

然后,当调用 IdentityServer 中的方法时,您可以引用这些身份验证方案。SignIn、Challenge、SignOut 等。

请注意,这将需要引导 IdentityServer 完整的租户集合。根据您的情况,如果租户经常更新,还需要定期重新启动 IdentityServer 以了解新的身份验证方案。


如果这是一个问题,你可能可以在IdentityServer运行时某种方式增强已注册的身份验证方案,但这并不容易。这可能需要使用AspNetCore提供的更大的自定义身份验证中间件实现。

0

你的意思是想添加多个身份验证提供程序的支持吗?这篇文档已经详细说明了如何在配置服务中添加多个身份验证提供程序。不再需要使用app.UseXXX手动配置管道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接