私は自分自身でロールを組んで実装しています。 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);
マシンキーを使用する必要はありません。すべてのマシンで同じ証明書を使用しています。 各RPは独自のCookieを作成しています。それは大丈夫です。私の質問は、STSがFedAuthのクッキーを自分自身のために書くべきかどうかです。そして:他のRPから再びヒットしたときにSTSが自動的にログインしないのはなぜですか? (はいの聴衆が正しく指定されている) – Swifty
あなたが使用しているSTSを知っていれば役に立ちます。通常、サインインすると、STSは独自のドメインにCookieを書き込みます。このCookieを使用すると、次のRPのシングルサインオンが有効になります。これは、通常のシナリオではセッションクッキー、「私を覚えている」シナリオでは永続的なクッキーである可能性があります。 RPは自由に自分が望むことをすることができます。一般的に、彼らは自分のドメインにセッションセキュリティトークンを書くことによってセキュリティトークンに応答します。次のRPがSTSに行くと、STSはUIを表示せずにRP用のセキュリティトークンを送信します。その最後の動作はSTSに依存します。 –
追加するべきことは1つだけです。一般に、信頼関係のある当事者間でセッションセキュリティトークンのクッキーを共有することはお勧めできません。 –