2016-08-08 17 views
0

我們使用WSFed將identityServer3作爲依賴方鏈接到ADFS3。登錄工作正常。嘗試實施註銷。已經在此處指定的IDServer中添加了一個端點https://leastprivilege.com/2015/07/08/federated-logout-with-the-katana-ws-federation-middleware/但是它不起作用,因爲它沒有註銷IDServer,因此在記錄呼叫時將其稱爲「確定」。ADFS3 - > IdentityServer3依賴方註銷

已通過直接在IDServer上註銷註銷來嘗試實驗。 :// idserver /註銷。但我必須調用它兩次才能使註銷工作。我第一次調用它時,我被重定向到ADFS註銷,我可以看到使用提琴手ADFS有一個iframe返回到:// idserver /?wa = wsignoutcleanup,所以我認爲這只是一個正確的代碼進入wsignoutcleanup的清理例程。

我發現,如果我呼叫註銷兩次它的工作,所以我嘗試做一個重定向到://idserver /註銷在清理功能。我可以看到使用fiddler頁面在iframe中調用,但是/ endsession?sid = xxx沒有被調用,也許是因爲它在iframe中的iframe?我也嘗試重定向到endsession?sid = xxxx。我認爲這工作,但只有當我打電話https://idserver/logout不,如果我打電話:// adfs /?wa = signout。我猜在調用endsession之前在註銷中做了某些事情?

一旦這個工作正常,我希望我們的openID/oauth JavaScript應用程序會選擇用戶會話已經改變使用checksession端點。它看起來在調用註銷兩次時會發生變化...

有沒有人有我們可以在IDserver的wsignoutcleanup例程中使用的代碼片段,它將正確清除會話?

感謝

+0

OK ,所以做一些更多的小事,並比較Iframes註銷其他網站的工作,我認爲它的「X-Frame-Options:SAMEORIGIN」正在停止正在更新的Cookie。 所以我認爲我需要禁用爲註銷添加x-frame-options,然後希望cookie會被空白,它應該工作。關於如何停止x-frame-options被添加到註銷響應的任何想法? – Andy

+0

又一步更近了......所以我現在注意到當我第一次撥打// idserver/logout時,我已經使我的wsignoutcleanup清理了idsvr,idsvr.partial,idsvr.external cookie,然後重定向到// idserver/endsession。我沒有設法做到的是在登錄// adfs/wsignout時cookie已經設置好,但是idserver仍然認爲它已經登錄了。 – Andy

+0

它終於工作了!原來,idsvr cookie不是idsvr,但idsrv doh!因此,idserver/logout正在工作,因爲它清理了cookie,然後重定向到了adfs/singout,它爲ifidr/wsignoutcleanup執行了重定向到idsvr/endsession的iframe。現在我將相同的cookie設置爲在idsvr/wsignoutcleanup中以兩種方式工作。 – Andy

回答

0

所以以爲我會發布的作品,不知道如果我需要調用signout的代碼,但是這一切似乎工作,可以幫助別人.....

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