ADFS3 -> 身份服务器 3 信赖方注销



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

一直在尝试直接调用IDServer上的logout,例如://IDServer/logout。但是我必须调用它两次才能使注销工作。我第一次调用它时,我被重定向到ADFS注销,我可以看到使用fiddler 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例程中使用,这将正确清除会话?

谢谢

所以我想我会张贴的代码,工作,不确定如果我需要调用签名,但它似乎都工作,可能会帮助别人.....

    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();
            }
        });
    }

最新更新