每个租户具有不同身份验证的 MVC 多租户应用程序
MVC multitenant application with different authentications per tenant
我花了很多时间寻找适用于我的场景的可行架构。
我们想要一个多租户 MVC 应用程序,其中每个租户都属于不同的公司。
每个租户都有设置,我们可以在其中配置他们的身份验证类型:客户 AD 或表单。
是否可以允许每个公司使用自己的活动目录登录?或者默认情况下,如果他们没有 AD,我们将使用表单身份验证。
我已经阅读了一些关于 Azure AD、AD 联合服务 + WIF(或最近的 OWIN)的文章,但我想要一些有关实现它的解决方案的指导。
谢谢
以前做过,我的方法是通过依赖注入使用asp.net-identity and per tenant override the SignIn Manager。
登录管理器是进行身份验证的地方,因此没有 嵌入式框架 可以做到这一点(我知道),而只是覆盖一个 class 中的几个方法非常简单。
您是否研究过 Azure AD B2C?您可以让用户使用他们公司的电子邮件/AD 登录。
看这里:https://azure.microsoft.com/en-us/services/active-directory-b2c/?cdn=disable
这是 Azure AD 中的一个非常标准的场景。您需要在 Azure portal 中注册一个 Azure AD 应用程序,并使用 OWIN OpenIdConnect 中间件进行 login/session 管理。如果您还想调用 Web API 或 Microsoft Graph,您可能还需要包含 ADAL(Active Directory 身份验证库)以帮助交换令牌的身份验证代码。
这是一个很棒的代码示例,向您展示了如何构建 .NET multitenant MVC App. Moreover, the rest of the docs for this stuff can be found at the Azure AD developer page。
根据其他答案,Azure AD 允许多租户。从字面上看,只需在配置中选择一个复选框。
但是,标准的身份验证方式是 OpenID Connect / OAuth。
此外,您无法更改身份验证模式。
您提到了 ADFS 和本地 AD。这些适合放在哪里?
使用 ASP.NET Identity 和 OpenID 连接,您可以获得此功能。 ASP.NET Identity 有本地帐户,通过 OpenID Connect to Azure AD,您可以让用户使用他们的 Azure AD 帐户登录。
应用程序定义必须是多租户应用程序。
您几乎可以按照说明 here if you are using ASP.NET Core, and then add OpenID Connect as described e.g. 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.cs
的 ConfigureServices
方法中的 Identity 样板代码之后添加上面的代码,这样就很好了去。
我花了很多时间寻找适用于我的场景的可行架构。
我们想要一个多租户 MVC 应用程序,其中每个租户都属于不同的公司。 每个租户都有设置,我们可以在其中配置他们的身份验证类型:客户 AD 或表单。
是否可以允许每个公司使用自己的活动目录登录?或者默认情况下,如果他们没有 AD,我们将使用表单身份验证。
我已经阅读了一些关于 Azure AD、AD 联合服务 + WIF(或最近的 OWIN)的文章,但我想要一些有关实现它的解决方案的指导。
谢谢
以前做过,我的方法是通过依赖注入使用asp.net-identity and per tenant override the SignIn Manager。
登录管理器是进行身份验证的地方,因此没有 嵌入式框架 可以做到这一点(我知道),而只是覆盖一个 class 中的几个方法非常简单。
您是否研究过 Azure AD B2C?您可以让用户使用他们公司的电子邮件/AD 登录。
看这里:https://azure.microsoft.com/en-us/services/active-directory-b2c/?cdn=disable
这是 Azure AD 中的一个非常标准的场景。您需要在 Azure portal 中注册一个 Azure AD 应用程序,并使用 OWIN OpenIdConnect 中间件进行 login/session 管理。如果您还想调用 Web API 或 Microsoft Graph,您可能还需要包含 ADAL(Active Directory 身份验证库)以帮助交换令牌的身份验证代码。
这是一个很棒的代码示例,向您展示了如何构建 .NET multitenant MVC App. Moreover, the rest of the docs for this stuff can be found at the Azure AD developer page。
根据其他答案,Azure AD 允许多租户。从字面上看,只需在配置中选择一个复选框。
但是,标准的身份验证方式是 OpenID Connect / OAuth。
此外,您无法更改身份验证模式。
您提到了 ADFS 和本地 AD。这些适合放在哪里?
使用 ASP.NET Identity 和 OpenID 连接,您可以获得此功能。 ASP.NET Identity 有本地帐户,通过 OpenID Connect to Azure AD,您可以让用户使用他们的 Azure AD 帐户登录。
应用程序定义必须是多租户应用程序。
您几乎可以按照说明 here if you are using ASP.NET Core, and then add OpenID Connect as described e.g. 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.cs
的 ConfigureServices
方法中的 Identity 样板代码之后添加上面的代码,这样就很好了去。