我正在构建一个ASP。Asp.net MVC 5网站使用Asp.net Identity (OWIN),并希望支持传统的用户名/密码身份验证以及针对Azure Active Directory的身份验证。这个应用程序不需要对微软id (Live id), Facebook, Twitter或任何其他外部提供商进行身份验证。我发现最接近SO的问题是这个:如何在ASP上同时进行Azure Active Directory单点登录和表单身份验证。净MVC
我看过当你在VS 2015中使用"个人用户帐户"选项以及"工作和学校帐户"选项创建项目时创建的示例。我的身份验证工作得很好;只有当我试图把它们结合起来时,我才会遇到问题。
在我的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);
}
}
}
);
}
此配置适用于密码身份验证,但不适用于AAD身份验证。要启用AAD身份验证,我需要注释掉设置AuthenticationType
的行AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
或者,只设置没有值的CookieAuthentication。
app.UseCookieAuthentication(new CookieAuthenticationOptions { });
我猜有一个相对简单的方法,我希望你能告诉我从哪里开始找
我搜索了微软的例子。它们看起来都像解。看这里:
- WebApp-WSFederation-DotNet
- WebApp-MultiTenant-OpenIdConnect-DotNet
- WebApp-OpenIDConnect-DotNet
WindowsAzureActiveDirectoryBearerAuthenticationOptions
最近ASP的Damian Edwards。. NET团队在github上开源了他们的社区站立网站。他们正在使用Azure AD,所以我希望它在正确的方向上有所帮助,不幸的是我没有Azure AD的任何经验。
这是youtube上的一段关于脱口秀的视频,我想这里有一些技巧和提示,你可以利用
我知道这是一个老问题。我潜在地希望做一些类似的事情,但可能更像ASP。Net身份认证到多个Azure AD租户。将Azure AD集成到ASP中。
…然后利用OnTokenValidated通知来实现您自己的发布者验证逻辑,这取决于您想要支持的租户(任何租户,Microsoft帐户+ Azure AD的特定列表,单个Azure AD,仅Microsoft帐户等)…
让我相信这里的示例代码可能包含了这个混合验证场景的关键。