Asp.net Identity使用密码和Azure Active Directory身份validation

我正在使用Asp.net Identity(OWIN)构建ASP.NET MVC 5网站,并希望支持传统的用户名/密码身份validation以及针对Azure Active Directory的身份validation。 此应用程序无需针对Microsoft ID(Live ID),Facebook,Twitter或任何其他外部提供程序进行身份validation。 我找到的最接近的SO问题是: 如何在ASP.NET MVC上执行Azure Active Directory单点登录和表单身份validation

我查看了使用“个人用户帐户”选项以及VS 2015中的“工作和学校帐户”选项创建项目时创建的示例。我的身份validation工作正常; 只有当我尝试将它们结合起来时,我才遇到问题。

在我的Startup_Auth.cs文件中,我正在配置OWIN,如下所示:

public void ConfigureAuth(IAppBuilder app) { app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); //app.UseCookieAuthentication(new CookieAuthenticationOptions { }); app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ExternalCookie, LoginPath = new PathString("/account/sign-in") }); app.UseOpenIdConnectAuthentication( new OpenIdConnectAuthenticationOptions { ClientId = clientId, Authority = authority, TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters { ValidateIssuer = false, }, Notifications = new OpenIdConnectAuthenticationNotifications() { SecurityTokenValidated = (context) => { return Task.FromResult(0); }, AuthorizationCodeReceived = (context) => { return Task.FromResult(0); }, AuthenticationFailed = (context) => { context.OwinContext.Response.Redirect("/Home/Error"); context.HandleResponse(); // Suppress the exception return Task.FromResult(0); } } } ); } 

此配置适用于密码身份validation,但不适用于AAD身份validation。 要启用AAD身份validation,我需要注释掉设置AuthenticationType的行

 AuthenticationType = DefaultAuthenticationTypes.ExternalCookie, 

或者,只设置没有值的CookieAuthentication。

 app.UseCookieAuthentication(new CookieAuthenticationOptions { }); 

我猜这有一个相对简单的方法,并会欣赏一些关于从哪里开始寻找的想法。

我搜索了微软的例子。 所有这些看起来都像是你的解决方案。 看这里:

  1. Web应用程序- WSFederation,DOTNET的
  2. Web应用程序,多租户,OpenIdConnect,DOTNET的
  3. Web应用程序- OpenIDConnect,DOTNET的

另一个例子是WindowsAzureActiveDirectoryBearerAuthenticationOptions

就在最近,ASP.NET团队的Damian Edwards 在github上开源了他们的社区站立网站 。 他们正在使用Azure AD,所以我希望它有助于朝着正确的方向发展,遗憾的是我对Azure AD没有任何经验。

这里也是他们谈论它的立场video ,我想有一些技巧和暗示你可以使用它们。

我意识到这是一个老问题。 我可能希望做类似的事情,但可能更像ASP.Net身份validation到多个Azure AD租户。 我发现这将Azure AD集成到ASP.NET Core中 ,其中包含以下声明:

…然后利用OnTokenValidated通知来实现您自己的发行者validation逻辑,具体取决于您要支持的租户(任何租户,Microsoft帐户+ Azure AD的特定列表,单个Azure AD,仅Microsoft帐户等)…

让我相信那里的示例代码可能是这个混合身份validation方案的关键。