2016-08-08 5 views
0

WSFSedを使用してADFS3の信頼関係者としてidentityServer3をリンクしています。ログインは正常に動作します。ログアウトを実装しようとしています。 IDServerのエンドポイントをここに指定されているようにhttps://leastprivilege.com/2015/07/08/federated-logout-with-the-katana-ws-federation-middleware/に追加しましたが、IDServerのログアウトでは機能しません。コールを記録したのでOKと呼ばれます。ADFS3 - > IdentityServer3信頼関係者のログアウト

IDServerでログアウトを直接呼び出してみましたか? :// idserver/logout。しかし、私はログアウトを働かせるために2回呼び出さなければなりません。私はそれを私がADFSログアウトにリダイレクトされたとき、私はフィドラーを使用して見ることができますADFSに戻るiframeがあります:// idserver /?wa = wsignoutcleanupだから私はそれがちょうど正しいコードをwsignoutcleanupのクリーンアップルーチン。

私はログアウトを2回呼び出すとうまくいくので、リダイレクトを試みました。つまり、クリーンアップ機能での// idserver/logoutへのリダイレクトを試みました。私はページがiframeで呼び出されているが、/ endsession?sid = xxxはiframeでiframeが呼び出されていないため、fiddlerを使用していることがわかります。私はまた、エンドセッションにリダイレクトしようとしましたか?sid = xxxx。私はこれが働いたと思うが、私がと呼んだ場合に限り、私は:// adfs /?wa = signoutと呼ぶ。私はエンドセッションを呼び出す前にログアウトで何かが行われていると推測していますか?

これがうまくいけば、私たちのopenID/oauth javascriptアプリケーションが、チェックセッションエンドポイントを使ってユーザーセッションが変更されたことを願っています。ログアウトを2回呼び出すと、変更が反映されるようです...

セッションを正常に消去するIDserverのwsignoutcleanupルーチンで使用できるコードスニペットを誰かが持っていますか?

おかげ

+0

OKですIframeが他のサイトにログアウトする方法を比較することで、私はその "X-Frame-Options:SAMEORIGIN"が更新されているクッキーを停止していると思います。 ログアウトのx-frame-optionsの追加を無効にする必要があると思うし、うまくいけばクッキーが消去され、うまくいくはずです。ログアウト応答に追加されるx-frame-optionsを停止する方法に関するアイデアはありますか? – Andy

+0

もう一つのステップが近づいています....初めてIDSサーバ/ログアウトを呼び出すとログアウトするようになりました。wsignoutcleanupをidsvr、idsvr.partial、idsvr.partternalクッキーを消去してからリダイレクトしました// idserver/endsession。私が管理していないのは、ログアウトが// adfs/wsignoutに行くときにクッキーが今すぐokに設定されているのに、IDサーバがまだログインしていると思っているようだということです。 – Andy

+0

最終的には動作します! Cookieはidsvrではなく、idsrv dohです!idserver/logoutはクッキーをクリーンアップして、idsvr/endsessionにリダイレクトするidsvr/wsignoutcleanupのiframeを実行したadfs/singoutにリダイレクトされたので動作していました。今私はidsvr/wsignoutcleanupで同じクッキーをブランクに設定しています。両方の方法で動作します。 – Andy

答えて

0

は、だから私は、私がサインアウトをコールする必要があるかどうかわからない動作するコードをポストだろうと思ったが、すべての.....他の誰かを助けるかもしれない、仕事に

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(); 
      } 
     }); 
    } 
関連する問題