2016-07-18 5 views
0

私は自分自身でロールを組んで実装しています。 2つのRPがあります。 RP間のSSOは機能しません(誤って)。 STSが作成しているクッキーと関係があると思われます。 STSは、自身のためにfedauth cookieを作成しています。私の理解から、フォーム認証Cookieを作成する必要がありますか?カスタムSTS SSOが失敗する

私は=真にisAuthenticated、まだユーザーがログインするように促され、自動的にバックRPにリダイレクトされませんClaimsPrincipalで見ることができる他のRPから二度目のSTSを打ちます。

SSOが以前は自動リダイレクトで動作していましたが、ロードバランサのRPはマシンキーを使用していた(スティッキーセッションがない)Cookieを共有できませんでした。これを解決するには、証明書を使用するカスタムSessionSecurityTokenHandler(以下のコード)を実装します。この時点で、STSはFedAuth Cookieの作成を開始し、SSOは失敗し始めました。

STSはトークンは、と書かれている:

FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(token); 

トークンハンドラ:

var sessionTransforms = new List<CookieTransform>(new CookieTransform[] 
    { 
     new DeflateCookieTransform(), 
     new RsaEncryptionCookieTransform(federationConfiguration.ServiceCertificate), 
     new RsaSignatureCookieTransform(federationConfiguration.ServiceCertificate) 
    }); 
    var sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly()); 
federationConfiguration.IdentityConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler); 

答えて

0

STSは独自のCookieを書き込みます。アプリケーションにセキュリティトークンをPOSTします。あなたのアプリケーションは通常、セッション認証クッキーを書いて応答し、有効期限が切れるまで使用します(その後、STSに戻ります)

Webファームで作業する場合、これはWIF設定を使用しています:

もちろん、Webファーム内のマシンは同じマシンキーを共有する必要があります。もちろん、独自のメカニズムを使用することはできますが、あまり意味がありません。

次に、各RPは自分の認証を証明する独自の「セッション」クッキーを書き込む必要があります。 2つのRPが同じドメインに存在する場合、異なるクッキー名を使用する必要があります。

+0

マシンキーを使用する必要はありません。すべてのマシンで同じ証明書を使用しています。 各RPは独自のCookieを作成しています。それは大丈夫です。私の質問は、STSがFedAuthのクッキーを自分自身のために書くべきかどうかです。そして:他のRPから再びヒットしたときにSTSが自動的にログインしないのはなぜですか? (はいの聴衆が正しく指定されている) – Swifty

+0

あなたが使用しているSTSを知っていれば役に立ちます。通常、サインインすると、STSは独自のドメインにCookieを書き込みます。このCookieを使用すると、次のRPのシングルサインオンが有効になります。これは、通常のシナリオではセッションクッキー、「私を覚えている」シナリオでは永続的なクッキーである可能性があります。 RPは自由に自分が望むことをすることができます。一般的に、彼らは自分のドメインにセッションセキュリティトークンを書くことによってセキュリティトークンに応答します。次のRPがSTSに行くと、STSはUIを表示せずにRP用のセキュリティトークンを送信します。その最後の動作はSTSに依存します。 –

+0

追加するべきことは1つだけです。一般に、信頼関係のある当事者間でセッションセキュリティトークンのクッキーを共有することはお勧めできません。 –

関連する問題