我们有一个基于ASP.NET Mvc 4构建的遗留系统,现在我们希望通过Azure Active Directory为当前用户和新用户支持Signal Sign On。由于我们已经管理了自己的身份验证工作流,因此ASP.NET身份确实不适合我们的情况。
我已经设法构建了一个演示,该演示正在使用OWIN OpenIdConnect中间件被动模式,而不使用ASP.NET身份。以下代码正常工作:
app.SetDefaultSignInAsAuthenticationType("ExternalCookie");
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ExternalCookie",
AuthenticationMode = AuthenticationMode.Passive,
});
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Passive,
ClientId = ClientId,
Authority = Authority
// More code
});
在ExternalLoginCallback
行动中:
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var authManager = Request.GetOwinContext().Authentication;
var result = await authManager.AuthenticateAsync("ExternalCookie");
authManager.SignOut("ExternalCookie");
//More code to convert to local identity
}
即使使用Google,Facebook或Twitter等其他提供商,这种情况也很常见。我不太清楚的一件事是ExternalCookie
,也许我错过了整件事。我的理解是,当外部登录成功时,外部cookie用于存储外部声明身份。然后我们打电话:
var result = await authManager.AuthenticateAsync("ExternalCookie");
authManager.SignOut("ExternalCookie");
获取外部声明身份,然后将外部身份转换为本地身份。我有点混淆为什么在这种情况下我们必须调用SignOut
外部cookie。
此外,我不确定在使用外部登录时是否必须使用外部Cookie,或者我们是否有其他方法而不使用外部Cookie。
请有人就这一点作出解释。
答案 0 :(得分:1)
要回答上一个问题,请在startup.auth文件中更改配置外部cookie的cookie名称 -
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
您可以使用字符串而不是DefaultAuthenticationTypes枚举,并直接指定Cookie的名称,如 -
app.UseExternalSignInCookie("myExternalCookie");