Identity Server 4 - 用作idp时谷歌的联合注销

时间:2018-05-30 20:03:51

标签: identityserver4 google-identity

我已将google配置为外部身份提供商。如何配置IdentityServer以注销此外部身份提供程序以及我的所有客户端应用程序?

仅供参考,客户端应用程序退出已经正常工作。只是想让用户退出谷歌。

2 个答案:

答案 0 :(得分:1)

<强> ANWER

Google并不支持Signout for Google External Identity Provider isn't working

背景资料:

当用户退出IdentityServer并且他们使用外部身份提供商登录时,可能会将他们重定向到也注销外部提供商。 Not all external providers support sign-out, as it depends on the protocol and features they support.

要检测是否必须将用户重定向到外部身份提供程序以进行注销通常是通过使用在IdentityServer中发布到cookie中的idp声明来完成的。设置到此声明中的值是相应身份验证中间件的AuthenticationScheme。在签出时,咨询此声明以了解是否需要外部注销。

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Logout(LogoutInputModel model)
{
    // build a model so the logged out page knows what to display
    var vm = await _account.BuildLoggedOutViewModelAsync(model.LogoutId);

    var user = HttpContext.User;
    if (user?.Identity.IsAuthenticated == true)
    {
        // delete local authentication cookie
        await HttpContext.SignOutAsync();

        // raise the logout event
        await _events.RaiseAsync(new UserLogoutSuccessEvent(user.GetSubjectId(), user.GetName()));
    }

    // check if we need to trigger sign-out at an upstream identity provider
    if (vm.TriggerExternalSignout)
    {
        // build a return URL so the upstream provider will redirect back
        // to us after the user has logged out. this allows us to then
        // complete our single sign-out processing.
        string url = Url.Action("Logout", new { logoutId = vm.LogoutId });

        // this triggers a redirect to the external provider for sign-out
        return SignOut(new AuthenticationProperties { RedirectUri = url }, vm.ExternalAuthenticationScheme);
    }

    return View("LoggedOut", vm);
}

直接从文档Sign-out of External Identity Providers

中删除

答案 1 :(得分:0)

这就是我所做的。在已注销的视图中,我添加了一个iframe和一个按钮,单击该按钮会在iframe中加载google注销网址。这似乎运作良好。