MVC 4 アプリケーションで ACS 2.0 を使用しています。
サインイン用に既に構成されており、ADFS を含むさまざまなプロバイダーで機能します。サインアウト機能を実装する必要があります。
この質問は既に古くなっているため、これらのサンプルのコードを使用しました。
これがどのように見えるかです:
// Load Identity Configuration
FederationConfiguration config = FederatedAuthentication.FederationConfiguration;
// Get wtrealm from WsFederationConfiguation Section
string wtrealm = config.WsFederationConfiguration.Realm;
string wreply = wtrealm; //return url
// Read the ACS Ws-Federation endpoint from web.Config
string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"];
SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint));
signoutRequestMessage.Parameters.Add("wreply", wreply);
signoutRequestMessage.Parameters.Add("wtrealm", wtrealm);
FederatedAuthentication.SessionAuthenticationModule.SignOut();
var signoutUrl = signoutRequestMessage.WriteQueryString();
その結果、リダイレクト先のサインアウト URL を取得し、トークンを破棄して送り返します。URL は次のようになります。
https://myacsnamespace.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wreply=http%3a%2f%2flocalhost%3a61192%2f&wtrealm=http%3a%2f%2flocalhost%3a61192%2f
その結果、Google、Yahoo、および Microsoft アカウントで期待どおりに機能します。サインアウトして保護領域にアクセスしようとすると、ID プロバイダーのリストが表示され、同じプロバイダーを選択した場合でも、再度サインインする必要があります。
しかし、ADFS プロバイダーを使用すると、次のように動作します。
サインアウトをクリックして、利用可能なプロバイダーのページにアクセスします
ADFS プロバイダーを再度選択します
古い AD 資格情報を使用して保護領域にアクセスします
唯一のプロバイダーとして ADFS を使用している場合、上記の手順 2 はスキップされ、ユーザーを変更することができずに常にサインインし続けます。
何が起こるかを見ると、ACS は ADFS から取得したセキュリティ トークンを破棄せず、再利用します。
ACS にこのトークンを強制的に破棄させる方法についての手がかりはありますか?
前もって感謝します!