AspCore客户端全球签到与IdentityServer



在一个非核心的asp mvc应用程序中,我有一个控制器动作来signout用户全局

它看起来是这样的

   public ActionResult Logout()
    {
        Request.GetOwinContext().Authentication.SignOut();
        return Redirect("/");
    }

现在我有一个asp核心客户端,想要注销我尝试

 public async Task<ActionResult> LogOut()
        {
            if (User.Identity.IsAuthenticated)
            {
                await HttpContext.Authentication.SignOutAsync("Cookies");
            }
            return Redirect("/");
        }

现在似乎我得到登出,但我重定向到一个网站,需要授权。我可以看到我很快又被重定向到身份服务器,它会自动地把我重新唱到。

总结:我在asp应用程序中注销了,但在身份服务器上没有。

如何全局签到?所以我需要在身份服务器上辞职吗?

如果使用OpenIdConnect认证,还需要远程签出。试着像下面这样修改你的代码:

    public async Task<ActionResult> LogOut()
    {
        if (User.Identity.IsAuthenticated)
        {
            await HttpContext.Authentication.SignOutAsync("Cookies");
            await context.Authentication.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties()
            {
                 RedirectUri = "<signed out url>"
            });
            // if you use different scheme name for openid authentication, use below code
            //await context.Authentication.SignOutAsync(<your openid scheme>, new AuthenticationProperties()
            //{
            //   RedirectUri = "/signedout"
            //});
        }
        return Redirect("/");
    }

参见原始示例https://github.com/aspnet/Security/blob/dev/samples/OpenIdConnectSample/Startup.cs

我遇到了同样的问题,为了解决这个问题,我不得不在我的IdentityServer应用程序中自己清除响应cookie。

var cookies = HttpContext.Request.Cookies.Keys;
foreach (var cookie in cookies)
{
    HttpContext.Response.Cookies.Delete(cookie, new CookieOptions
    {
        Domain = "localhost" // Your host name here
    });
}
// SignOutAsync depends on IdentityServer4 > Microsoft.AspNetCore.Http.Authentication
await HttpContext.Authentication.SignOutAsync();

我所做的是,当我的客户端想要退出时,我将其重定向到我的IdentityServer应用程序,该应用程序如上所述清除响应cookie。

在此代码中,我删除了localhost的所有cookie,但是您可以在那里添加一个过滤器,并仅删除IdentityServer用于持久用户身份验证的cookie。

下面你会看到更多关于这个实现的细节。

http://benjii.me/2016/04/single-sign-out-logout-identity-server-4/

这是ASP的官方文档。. NET身份服务器单点签出:

单点签到文档

这是从他们的演示实现中获取的一个示例:

public ActionResult Signout()
{
    Request.GetOwinContext().Authentication.SignOut();
    return Redirect("/");
}
public void SignoutCleanup(string sid)
{
    var cp = (ClaimsPrincipal)User;
    var sidClaim = cp.FindFirst("sid");
    if (sidClaim != null && sidClaim.Value == sid)
    {
        Request.GetOwinContext().Authentication.SignOut("Cookies");
    }
}

相关内容

  • 没有找到相关文章

最新更新