【问题标题】:MVC 5 openid connect on-premises ADFS 4.0 logout issueMVC 5 openid 连接本地 ADFS 4.0 注销问题
【发布时间】:2017-03-10 17:14:07
【问题描述】:

我正在尝试使用 ADFS 设置新的 MVC 5 项目和新的 2016 服务器。我可以使用 Oauth 2 和 OpenID Connect 进行身份验证。我遇到的问题是当我尝试注销应用程序时。注销链接指向默认的 /Account/SignOut 操作。当调用该操作时,我会被重定向到注销后重定向 uri,即https://website.com。此重定向循环,直到浏览器错误“网站重定向您太​​多次”。

这是我的退出方法。

 public void SignOut()
    {
        string callbackUrl = Url.Action("SignOutCallback", "Account", routeValues: null, protocol: Request.Url.Scheme);

        // Send an OpenID Connect sign-out request.
            HttpContext.GetOwinContext().Authentication.SignOut(
            new AuthenticationProperties { RedirectUri = callbackUrl },
             OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType
            );

    }

如果我只是打电话

  HttpContext.GetOwinContext().Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationType)

注销失败,但至少不会发生持续重定向。

是否存在 Authentication.Signout() 方法的过载,该方法将我注销然后重定向到注销后重定向 uri?

【问题讨论】:

  • 这只是一条评论,让您知道您并不孤单。我自己正在调查这个问题。从我目前看到的情况来看,ADFS 2016 上的“众所周知的端点”中似乎没有像 Azure Active Directory 那样的注销端点。
  • Chuck,我还在为此苦苦挣扎,但这个站点有一个很好的示例,说明如何设置客户端,即使它是针对 Azure 的。 bitoftech.net/2016/08/31/…。互联网上关于如何设置本地单点登录的信息似乎非常有限。
  • 谢谢。我已经使用 OID Connect 完成了 AAD 单点登录。这是我第一次参加 ADFS 2016。Azure 知名端点上有一个注销端点,但在 ADFS 上似乎不是这样。

标签: asp.net-mvc adfs openid-connect


【解决方案1】:

我与 MS 支持部门合作,并确定 OID Connect 与 ADFS 2016 目前不支持注销。它可能是未来版本的一部分,但目前还没有确定的支持发布日期。

【讨论】:

    【解决方案2】:

    ADFS 4.0(在 Windows Server 2016 上)支持“单次注销”。如果您使用Microsoft.AspNetCore.Authentication.OpenIDConnect 包(这是较新的,适用于 ASP.NET Core),它可以无缝运行。

    如果您查询 OpenID Connect 配置的知名端点 https://your-server/adfs/.well-known/openid-configuration,您将找到一个密钥 end_session_endpoint,其中包含您应该使用的注销 URL。

    另外,您可以查看文档:https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/development/ad-fs-logout-openid-connect

    例如,为了从您的控制器调用它,您将使用如下操作方法:

    [HttpGet]
    public IActionResult SignOut()
    {
        var callbackUrl = Url.Action(nameof(SignedOut), "Account", values: null, protocol: Request.Scheme);
        return SignOut(
            new AuthenticationProperties { RedirectUri = callbackUrl },
            CookieAuthenticationDefaults.AuthenticationScheme,
            OpenIdConnectDefaults.AuthenticationScheme);
    }
    

    您可能会发现此示例很有用(即使它适用于 Azure ADFS,它也适用于本地安装):https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect-aspnetcore

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 2017-10-07
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2014-08-20
      • 2014-05-02
      相关资源
      最近更新 更多