5

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 にこのトークンを強制的に破棄させる方法についての手がかりはありますか?

前もって感謝します!

4

1 に答える 1

0

@ore​​n-melzerの回答に+1:ブラウザはhttpの基本的な資格情報をキャッシュし、自動的に再送信します。フォーム認証 (Cookie を使用) に移行するか、ログアウト時に、具体的にはブラウザーの認証ヘッダーを拒否し、常に 401 を返します。この「有効な資格情報に対して 401 を返す」ことでブラウザーがクリアされることがあります。ユーザーにブラウザーを閉じるように要求する必要がある場合もあります。 .

于 2013-08-26T04:51:44.880 に答える