Asp.net 使用密码和 Azure Active Directory 身份验证的身份
Asp.net Identity using password and Azure Active Directory authentication
我正在使用 Asp.net Identity (OWIN) 构建一个 ASP.NET MVC 5 网站,并希望支持传统的 username/password 身份验证以及针对 Azure Active Directory 的身份验证。此应用不需要针对 Microsoft ID(Live ID)、Facebook、Twitter 或任何其他外部提供商进行身份验证。我发现的最接近的问题是这个:How to do both Azure Active Directory Single Sign On and Forms Authentications on ASP.NET MVC
我查看了使用 "Individual User Accounts" 选项以及 VS 2015 中的 "Work and School Accounts" 选项创建项目时创建的示例。我的身份验证单独运行良好;只有当我尝试将它们组合起来时,我才 运行 遇到问题。
在我的 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 { });
我猜想对此有一个相对简单的方法,希望能提供一些关于从哪里开始寻找的想法。
我从微软搜索了例子。所有这些看起来都像您的解决方案。看这里:
另一个例子是 here 和 WindowsAzureActiveDirectoryBearerAuthenticationOptions
最近 ASP.NET 团队的 Damian Edwards 开源了他们的 community standup website on github。他们正在使用 Azure AD,所以我希望它能在正确的方向上有所帮助,不幸的是我对 Azure AD 没有任何经验。
这里也是 youtube video of the standup 他们谈论它的地方,我认为这里有一些提示,也许您可以利用它们。
我意识到这是一个老问题。我可能希望对多个 Azure AD 租户执行类似但可能更像是 ASP.Net 身份验证的操作。我在 Integrating Azure AD into ASP.NET Core 中找到了这条语句:
...then leverage the OnTokenValidated notification to implement your own issuer validation logic depending on which tenants you want to support (any tenant, Microsoft Account + specific list of Azure AD, single Azure AD, just Microsoft Account, etc)...
让我相信那里的示例代码可能是这种混合身份验证方案的关键。
我正在使用 Asp.net Identity (OWIN) 构建一个 ASP.NET MVC 5 网站,并希望支持传统的 username/password 身份验证以及针对 Azure Active Directory 的身份验证。此应用不需要针对 Microsoft ID(Live ID)、Facebook、Twitter 或任何其他外部提供商进行身份验证。我发现的最接近的问题是这个:How to do both Azure Active Directory Single Sign On and Forms Authentications on ASP.NET MVC
我查看了使用 "Individual User Accounts" 选项以及 VS 2015 中的 "Work and School Accounts" 选项创建项目时创建的示例。我的身份验证单独运行良好;只有当我尝试将它们组合起来时,我才 运行 遇到问题。
在我的 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 { });
我猜想对此有一个相对简单的方法,希望能提供一些关于从哪里开始寻找的想法。
我从微软搜索了例子。所有这些看起来都像您的解决方案。看这里:
另一个例子是 here 和 WindowsAzureActiveDirectoryBearerAuthenticationOptions
最近 ASP.NET 团队的 Damian Edwards 开源了他们的 community standup website on github。他们正在使用 Azure AD,所以我希望它能在正确的方向上有所帮助,不幸的是我对 Azure AD 没有任何经验。
这里也是 youtube video of the standup 他们谈论它的地方,我认为这里有一些提示,也许您可以利用它们。
我意识到这是一个老问题。我可能希望对多个 Azure AD 租户执行类似但可能更像是 ASP.Net 身份验证的操作。我在 Integrating Azure AD into ASP.NET Core 中找到了这条语句:
...then leverage the OnTokenValidated notification to implement your own issuer validation logic depending on which tenants you want to support (any tenant, Microsoft Account + specific list of Azure AD, single Azure AD, just Microsoft Account, etc)...
让我相信那里的示例代码可能是这种混合身份验证方案的关键。