IdentityServer4正确处理注销

时间:2017-03-14 10:05:26

标签: asp.net-core identityserver4

我有一个处理登录功能的IndentityServer4项目和一个单独的MVCClient,我需要从MVC客户端获得一个注销功能,但是看一下这个就是这个(MVC客户端):

public async Task Logout()
    {
        await HttpContext.Authentication.SignOutAsync("Cookies");
        await HttpContext.Authentication.SignOutAsync("oidc");
    }

但是在identityserver4项目中有一个更复杂的注销,它似乎做得更多:

[HttpPost]
    [ValidateAntiForgeryToken]
    [AllowAnonymous]
    public async Task<IActionResult> Logout(LogoutViewModel model)
    {
        var vm = await _account.BuildLoggedOutViewModelAsync(model.LogoutId);
        if (vm.TriggerExternalSignout)
        {
            string url = Url.Action("Logout", new { logoutId = vm.LogoutId });
            try
            {
                // hack: try/catch to handle social providers that throw
                await HttpContext.Authentication.SignOutAsync(vm.ExternalAuthenticationScheme,
                    new AuthenticationProperties { RedirectUri = url });
            }
            catch (NotSupportedException) // this is for the external providers that don't have signout
            {
            }
            catch (InvalidOperationException) // this is for Windows/Negotiate
            {
            }
        }

        // delete authentication cookie
        await _signInManager.SignOutAsync();

        return View("LoggedOut", vm);
    }

有人可以解释客户端真正需要的逻辑。

1 个答案:

答案 0 :(得分:1)

第一个Logout方法用于MVC客户端。 第二个代码属于IdentityServer服务。

第一个Logout初始化注销过程的某个状态,并重定向到IdentityServer上的Logout视图(如果查看示例,IdentityServer AccountController代码中有两个Logout:一个用于注销验证视图和一个POST处理程序)。

相关问题