我一直在寻找关于我的方案的可行架构的许多小时。
我们希望有一个多租户MVC应用程序,其中每个租户属于不同的公司。 每个租户都有可以配置其身份验证类型的设置:客户AD或表单。
是否可以允许每家公司使用自己的活动目录登录?或者默认情况下,如果他们没有AD,我们会使用表单身份验证。
我已经阅读了一些关于Azure AD,AD联合服务+ WIF(或更近期的OWIN)的文章,但我希望获得有关实现它的解决方案的一些指导。
由于
答案 0 :(得分:2)
这是Azure AD中非常标准的方案。您将要在Azure portal中注册Azure AD应用程序,并使用OWIN OpenIdConnect中间件进行登录/会话管理。如果您还想调用Web API或Microsoft Graph,您可能还需要包含ADAL(Active Directory身份验证库)以帮助交换令牌的身份验证代码。
这是一个很棒的代码示例,向您展示如何构建.NET multitenant MVC App。此外,这些内容的其他文档可以在Azure AD developer page找到。
答案 1 :(得分:0)
之前完成此操作,我的方式是使用asp.net-identity并且每个租户通过依赖注入覆盖SignIn Manager。
登录管理器是进行身份验证的地方,所以没有一个 drop-in框架只是这样做(我知道),但只是覆盖了几个方法单个课程非常简单。
答案 2 :(得分:0)
您是否考虑过Azure AD B2C?您可以让用户使用他们的公司电子邮件/ AD登录。
看看这里:https://azure.microsoft.com/en-us/services/active-directory-b2c/?cdn=disable
答案 3 :(得分:0)
根据其他答案,Azure AD允许多租户。只需在配置中选中一个复选框。
但是,标准的身份验证方式是OpenID Connect / OAuth。
此外,您无法更改身份验证模式。
您提到ADFS和内部部署AD。这些适合哪些?
答案 4 :(得分:0)
使用ASP.NET Identity和OpenID connect,您将获得此功能。 ASP.NET Identity具有本地帐户,使用OpenID Connect到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,
};
});
如果您使用个人用户帐户创建新应用,则可以使用ConfigureServices
Startup.cs
方法在Task task = taskService.findById(6);
User user = task.getUser(); //HERE
user.getTasks().remove(task); //..and HERE
task.setUser(null);
taskService.save(task);
方法中添加上述代码,然后您就可以了