【问题标题】:ADFS3 -> IdentityServer3 Relying party logoutADFS3 -> IdentityServer3 依赖方注销
【发布时间】:2016-08-08 17:27:15
【问题描述】:

我们使用 WSFed 将 identityServer3 作为依赖方链接到 ADFS3。登录工作正常。试图实现注销。已按照此处指定的https://leastprivilege.com/2015/07/08/federated-logout-with-the-katana-ws-federation-middleware/ 在 IDServer 中添加了一个端点,但它不起作用,因为它没有注销 IDServer,它被称为 OK,因为已经记录了调用。

一直在尝试直接在 IDServer 上调用注销,例如://idserver/注销。但我必须调用它两次才能让注销工作。我第一次调用它时被重定向到 ADFS 注销,我可以看到使用提琴手 ADFS 有一个 iframe 可以返回到 ://idserver/?wa=wsignoutcleanup 所以我认为这只是将正确的代码放入wsignoutcleanup 的清理例程。

我发现如果我两次调用注销它会起作用,所以我尝试在清理功能中重定向到 ://idserver/logout。我可以看到使用 fiddler 页面在 iframe 中被调用,但 /endsession?sid=xxx 没有被调用,可能是因为它是 iframe 中的 iframe?我也尝试过重定向到 endsession?sid=xxxx。我认为这有效,但前提是我打电话给https://idserver/logout,而不是我打电话给://adfs/?wa=signout。我猜在调用 endsession 之前在注销中做了一些事情?

一旦这工作正常,我希望我们的 openID/oauth javascript 应用程序能够使用 checksession 端点发现用户会话已更改。调用 logout 两次时,它似乎确实接受了更改...

是否有人有我们可以在 IDserver 上的 wsignoutcleanup 例程中使用的可以正确清除会话的 sn-p 代码?

谢谢

【问题讨论】:

  • 好的,所以做更多的摆弄和比较 Iframes 如何注销其他工作的网站,我认为它的“X-Frame-Options:SAMEORIGIN”正在停止更新 cookie。所以我认为我需要禁用为注销添加 x-frame-options,然后希望 cookie 将被清空并且它应该可以工作。关于如何停止将 x-frame-options 添加到注销响应的任何想法?
  • 又近了一步......所以我现在有了它,当我第一次调用 //idserver/logout 时它会注销,我已经让我的 wsignoutcleanup 清理了 idsvr、idsvr.partial、idsvr .external cookie,然后重定向到 //idserver/endsession。我没有设法做的是在去 //adfs/wsignout 时注销工作,cookie 现在设置好了,但 idserver 似乎仍然认为它已登录。
  • 终于成功了!!原来 idsvr cookie 不是 idsvr 而是 idsrv doh!.. 所以 idserver/logout 正在工作,因为它清理了 cookie,然后重定向到 adfs/singout,它对 idsvr/wsignoutcleanup 做了一个 iframe,重定向到 idsvr/endsession。现在我在 idsvr/wsignoutcleanup 中将相同的 cookie 设置为空白,它可以双向工作。

标签: identityserver3


【解决方案1】:

所以我想我会发布有效的代码,不确定我是否需要调用注销,但这一切似乎都有效,可能对其他人有帮助.....

    private static void AddSignoutEndpoint(IAppBuilder app)
    {
        app.Use(async (ctx, next) =>
        {
            var qs = ctx.Request.Query;
            var wa = qs.Get("wa");

            if (wa != null)
            {
                if (wa == "wsignoutcleanup1.0")
                {
                    ctx.Response.Cookies.Delete("idsrv");
                    ctx.Response.Cookies.Delete("idsrv.external");
                    ctx.Response.Cookies.Delete("idsrv.partial");
                    ctx.Authentication.SignOut("Cookies");
                    ctx.Response.Redirect("connect/endsessioncallback?sid=" + ctx.Request.Cookies["idsvr.session"]);
                }
                else
                {
                    await next();
                }
            }
            else
            {
                await next();
            }
        });
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多