Asp.net mvc ASP.NET OWIN中用于外部登录的外部Cookie
我们有一个基于ASP.NET Mvc 4的遗留系统,现在我们希望支持当前用户和新用户通过Azure Active Directory进行信号登录。由于我们已经管理了自己的身份验证工作流,ASP.NET标识显然不适合我们的情况 我已经成功地构建了一个演示,它在OpenIdConnect中间件被动模式下工作,而不使用ASP.NET标识。以下代码工作正常:Asp.net mvc ASP.NET OWIN中用于外部登录的外部Cookie,asp.net-mvc,asp.net-mvc-5,owin,azure-active-directory,openid-connect,Asp.net Mvc,Asp.net Mvc 5,Owin,Azure Active Directory,Openid Connect,我们有一个基于ASP.NET Mvc 4的遗留系统,现在我们希望支持当前用户和新用户通过Azure Active Directory进行信号登录。由于我们已经管理了自己的身份验证工作流,ASP.NET标识显然不适合我们的情况 我已经成功地构建了一个演示,它在OpenIdConnect中间件被动模式下工作,而不使用ASP.NET标识。以下代码工作正常: app.SetDefaultSignInAsAuthenticationType("ExternalCookie"); app.UseCookie
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
}
以获取外部索赔标识,然后将外部标识转换为本地标识。我有点困惑,为什么在这种情况下我们必须调用SignOut
externalcookie
另外,我不确定在使用外部登录时是否必须使用外部Cookie,或者我们是否有其他不使用外部Cookie的方法
请有人对此进行解释。要回答您的最后一个问题,请在startup.auth文件中更改cookie的名称,在该文件中配置外部cookie-
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
您可以使用字符串代替DefaultAuthenticationTypes枚举,并直接指定cookie的名称,如-
app.UseExternalSignInCookie("myExternalCookie");
关于你的第一个问题:注销,这是清理。看见关于你的第三个问题:“ExternalCookie”名称,我很确定这只是为了让你的身份验证代码引用同一个cookie。如果将代码中字符串文字“ExternalCookie”的所有实例替换为(比如)“BlergyBlergy”,那么该功能仍然可以工作。在web生命周期中直接检查浏览器cookie以进行说明。Brock Allen有一个很好的方法。@chrissimons:谢谢你的链接,我还发现这个答案解释得很好。在你的例子中,你已经在使用字符串了,所以你只需要指定一个不同的名称。
app.UseExternalSignInCookie("myExternalCookie");