2011-11-07 7 views
1

私は、Windows Identity Foundationを使用して、当サイトへのログインを管理しています。Windows identity foundation - サインアウトまたはクレームの更新

ユーザーがログインするとき、私はクレームを入れるために彼の要求でいくつかの情報を使用しています。 これは、すべての作業罰金ですが、今私は、このシナリオを管理する必要があります。

  1. ユーザーがすでにログインしathenticatedと有効なトークンを持っています。
  2. しかし、ユーザーは別のサイトからのリダイレクトを経由して再度ブラウズすることを決めます。
  3. 彼のリクエストに含まれる情報は異なります。
  4. 私は
      が彼をサインアウト
    • するかしたい - 彼は自然に彼の新しい情報
    • で新しいトークンを作成するようOR彼の既存のトークンを更新します。

だから私の質問は次のとおりです。

  1. どのように私は、Windowsアイデンティティ基盤からサインアウトしていますか?
  2. または既存のクレームを更新するにはどうすればよいですか?

私はこのコードを試してみました:

public void ExpireClaims(HttpContextBase httpContextBase) 
    { 
     var module = 
      httpContextBase.ApplicationInstance.Modules["WSFederationAuthenticationModule"] as 
      WSFederationAuthenticationModule; 
     if (module == null) 
     { 
      return; 
     } 
     module.SignOut(true); 
    } 

しかし、モジュールはなかれnullです。

、私はこの試みた:

public void FederatedSignOut(string replyUrl) 
    { 
     WSFederationAuthenticationModule.FederatedSignOut(null, new Uri(replyUrl)); 
    } 

をしかし、私はこれを行うとき、私はnull参照のexecptionを取得します。

ありがとうございました。

答えて

8

基本的にサインアウトはちょうどそうクッキーを削除されています

FormsAuthentication.SignOut

または

FederatedAuthentication.SessionAuthenticationModule.SignOut

または

FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie

に動作します。

FederatedPassiveSignInStatus(あなたのツールボックスにあるはずです)を使用してください。 SignOutActionFederatedSignOutに設定すると、コントロールはSTSセッションもクリアします。

+0

ありがとう、すばらしい答え!私はFederatedAuthentication.SessionAutheticationModule.SignOutを使用しています。私は、FormsAuthentication.SignOutを使用するだけで、ユーザがあなたが現在いるものではなく、連合サイトにアクセスできることに気付きました。最後のオプションも調査します。再度、感謝します。 – Sean

+0

結局のところ、上記の方法では、現在の依拠当事者から私を署名しただけです。彼らはすべての信頼関係者から私を署名していませんでした。私は自分のカスタムフェデレーションサインをstsに実装しなければなりませんでした。ここで私の他の質問へのリンクです:http://stackoverflow.com/questions/8228746/wif-federatedsignout-not-signing-user-out-all-sites – Sean

+0

また、私はあなたが作成したクレームを更新できないことを発見トークン。賢明な行動のように見えるセキュリティの観点から! – Sean

関連する問題