これがセットアップです。STS プロバイダーと 2 つの ASP.NET MVC サイトがあり、どちらも同じ STS プロバイダーを信頼しています。ユーザーはサイト A にアクセスし、STS プロバイダーのパッシブ ログインにリダイレクトされ、適切に認証され、期待どおりサイト 'A' にリダイレクトされます。これはすべてうまくいきます。次を使用して、サイト「A」のコードでトークンと ID を確認できます。
IClaimsPrincipal claimsPrincipal = Thread.CurrentPrincipal as IClaimsPrincipal;
IClaimsIdentity claimsIdentity = (IClaimsIdentity)claimsPrincipal.Identity;
現在、サイト「A」からサイト「B」へのリンクがあり、同じSTS プロバイダーを信頼しています。問題は、サイト 'B' に移動すると、クレーム情報が存在せず、ユーザーが自動的に認証されないことです。STS および WIF のドキュメントによると、次のことが発生するはずです。
「フローは通常どおりに開始され、ユーザーはサイト A の B からページを要求し、トークンを取得するために STS にリダイレクトされます。ただし、このユーザーは、STS サイトで既に認証されています。 STS cookie. これは、STS ページの要求が、ユーザーに資格情報収集用の UI を表示することなく、SecurityTokenService 発行シーケンスの実行に直接つながることを意味します.トークンはサイレントに発行され、B に転送されます.いつもの順番通り。ユーザーが B へのリンクをクリックし、ブラウザーが B から要求されたページを表示した瞬間から、ブラウザーのアドレス バーのちらつきだけで、なんらかの認証がフードの下で行われたという事実が明らかになります。これがシングル サインオン (SSO) の意味です。ユーザーは 1 回だけサインインした経験があり、その瞬間から、システムはユーザーに再度資格情報を要求することなく、他の信頼できるパーティにアクセスできるようになります。」
これを正しく機能させるには、STS プロバイダー、サイト A、またはサイト B で明示的に何を行う必要があるかを知っている人はいますか? STS とサイト「A」は完全に機能していることを思い出してください。サイト「B」が SSO 機能を取得していないだけです。
ありがとう!