我们有一个基于ASP.NET Mvc 4构建的遗留系统,现在我们希望为现有用户和新用户支持通过Azure Active Directory进行Signal Sign On。由于我们已经管理了自己的身份验证工作流程,因此ASP.NET Identity显然不适用于我们的情况。
我已经成功构建了一个演示,它使用OWIN OpenIdConnect中间件被动模式,在不使用ASP.NET Identity的情况下正常工作。以下代码是正确的:
在
为了获取外部声明身份,然后将外部身份转换为本地身份。我有一点困惑,为什么在这种情况下我们必须调用
另外,我不确定在使用外部登录时是否必须使用外部cookie,或者我们是否有其他方法可以避免使用外部cookie。
请有人对这个问题进行解释。
我已经成功构建了一个演示,它使用OWIN OpenIdConnect中间件被动模式,在不使用ASP.NET Identity的情况下正常工作。以下代码是正确的:
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。
请有人对这个问题进行解释。