【问题标题】:MVC multitenant application with different authentications per tenant每个租户具有不同身份验证的 MVC 多租户应用程序
【发布时间】:2018-04-05 15:28:02
【问题描述】:

我一直在寻找适合我的场景的可行架构。

我们希望有一个多租户 MVC 应用程序,其中每个租户都属于不同的公司。 每个租户都有设置,我们可以在其中配置他们的身份验证类型:客户 AD 或表单。

是否可以允许每个公司使用自己的活动目录登录?或者默认情况下,如果他们没有 AD,我们使用表单身份验证。

我已经阅读了一些关于 Azure AD、AD 联合服务 + WIF(或最近的 OWIN)的文章,但我想要一些有关实现它的解决方案的指导。

谢谢

【问题讨论】:

    标签: asp.net-mvc owin azure-active-directory multi-tenant adfs


    【解决方案1】:

    这是 Azure AD 中非常标准的场景。您需要在 Azure portal 中注册 Azure AD 应用程序,并使用 OWIN OpenIdConnect 中间件进行登录/会话管理。如果您还想调用 Web API 或 Microsoft Graph,您可能还需要包含 ADAL(Active Directory 身份验证库)以帮助交换身份验证代码以获取令牌。

    这里有一个很棒的代码示例,向您展示了如何构建.NET multitenant MVC App。此外,可以在Azure AD developer page 找到其他文档。

    【讨论】:

      【解决方案2】:

      之前已经这样做了,我这样做的方式是使用 并且每个租户通过依赖注入覆盖 SignIn Manager

      登录管理器是进行身份验证的地方,因此没有一个插入式框架可以做到这一点(我知道),而只是覆盖了其中的几个方法单节课很简单。

      【讨论】:

      • 所以我只需要为活动目录身份验证制作一个自定义的 SignInManager(为每个租户传递 AD 设置)并使用默认的进行表单身份验证?
      • 这是一种方法。
      【解决方案3】:

      您是否研究过 Azure AD B2C?您可以让用户使用他们公司的电子邮件/广告登录。

      看这里:https://azure.microsoft.com/en-us/services/active-directory-b2c/?cdn=disable

      【讨论】:

        【解决方案4】:

        根据其他答案,Azure AD 允许多租户。从字面上看,只是在配置中选择一个复选框。

        但是,标准的身份验证方式是 OpenID Connect / OAuth。

        此外,您不能更改身份验证模式。

        您提到了 ADFS 和本地 AD。这些在哪里适合?

        【讨论】:

        • 事实上,我们的客户可能已经拥有一个活动目录(本地),因此我们正在寻找解决方案(Azure AD 或 ADFS?),以便在他们尝试连接到我们的多租户时使用他们现有的凭据应用程序。
        • 您可以使用联合租户执行此操作。然后流程是 AAD 重定向到 ADFS,然后根据本地 AD 进行身份验证。
        【解决方案5】:

        将 ASP.NET Identity 与 OpenID 连接一起使用,您可以获得此功能。 ASP.NET Identity 具有本地帐户,通过 OpenID Connect to Azure AD,您可以让用户使用其 Azure AD 帐户登录。

        应用程序定义需要是多租户应用程序。

        如果您使用的是 ASP.NET Core,您几乎可以按照说明 here,然后按照说明添加 OpenID Connect,例如here 或在 app.UseIdentity 调用之后添加类似的代码:

                    // Add Authentication services.
                    services.AddAuthentication()
                        // Configure the OWIN pipeline to use OpenID Connect auth.
                        .AddOpenIdConnect(option =>
                        {
                            option.ClientId = Configuration["AzureAD:ClientId"];
                            option.Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAd:Tenant"]);
                            option.SignedOutRedirectUri = Configuration["AzureAd:PostLogoutRedirectUri"];
                            option.Events = new OpenIdConnectEvents
                            {
                                OnRemoteFailure = OnAuthenticationFailed,
                            };
                        });
        

        如果您使用个人用户帐户创建新应用,您可以在 Startup.csConfigureServices 方法中的 Identity 样板代码之后添加上述代码,然后您就可以开始了。

        【讨论】:

          猜你喜欢
          • 2021-02-12
          • 1970-01-01
          • 1970-01-01
          • 2016-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-11
          • 2022-10-24
          相关资源
          最近更新 更多