Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET OWIN中用于外部登录的外部Cookie_Asp.net Mvc_Asp.net Mvc 5_Owin_Azure Active Directory_Openid Connect - Fatal编程技术网

Asp.net mvc ASP.NET OWIN中用于外部登录的外部Cookie

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

我们有一个基于ASP.NET Mvc 4的遗留系统,现在我们希望支持当前用户和新用户通过Azure Active Directory进行信号登录。由于我们已经管理了自己的身份验证工作流,ASP.NET标识显然不适合我们的情况

我已经成功地构建了一个演示,它在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
}
以获取外部索赔标识,然后将外部标识转换为本地标识。我有点困惑,为什么在这种情况下我们必须调用
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");