23

次の利用可能な適切な例はありますか?

WIF SDKを見ると、ユーザーが認証に使用するセキュリティトークンサービス(STS)上でASP.NETサイトのシンスキンにリダイレクトするためにASP.NETと組み合わせてWIFを使用する例があります(ユーザー名を指定WSFederationAuthenticationModule (FAM)することにより)およびパスワード)。

WIFとクレームベースのアクセスを正しく理解している場合は、ユーザーがユーザー名とパスワードを入力し、認証のためにこのデリゲートをSTSに送信して、セキュリティ標準を介してエンドポイントにログインの詳細を送信する独自​​のログイン画面をアプリケーションに提供してほしいと思います。 (WS- *)、およびSAMLトークンが返されることを期待しています。理想的には、を組み合わせて SessionAuthenticationModule使用​​する例のように機能します。つまり、セッションセキュリティチャンクCookieからを再構築し、セキュリティセッションの有効期限が切れたときにアプリケーションのログインページにリダイレクトします。FAMSessionAuthenticationModuleIClaimsPrincipal

FAM適切なweb.config設定を使用して、私が説明することは可能ですかSessionAuthenticationModule、それともこれを処理するために自分で書くことを考える必要がありますHttpModuleか?または、パッシブリクエスターシナリオでユーザーが事実上のアプローチでログインするシンWebサイトSTSにリダイレクトしていますか?

4

5 に答える 5

19

WIF + MVC の例は、「クレーム ID ガイド」のこの章で利用できます。

http://msdn.microsoft.com/en-us/library/ff359105.aspx

基本的な原則をすべて理解するために、最初の数章を読むことをお勧めします。このブログ投稿では、MVC + WIF の詳細について説明しています。

http://blogs.msdn.com/b/eugeniop/archive/2010/04/03/wif-and-mvc-how-it-works.aspx

ログイン エクスペリエンスを制御することはまったく問題ありません。独自の STS を (独自のルック アンド フィールなどで) デプロイする必要があります。アプリは単に AuthN に依存するだけです (そのため、アプリは通常「証明書利用者」と呼ばれます)。

このアーキテクチャの利点は、authN が 1 つのコンポーネント (STS) に委任され、多くのアプリに分散されないことです。しかし、もう 1 つの (大きな) 利点は、より高度なシナリオを非常に簡単に実現できることです。たとえば、他の組織の ID プロバイダーと連携できるようになりました。

それがユージニオに役立つことを願っています

@希望の星:

トークン (クレームを含む) は、オプションで暗号化できます (それ以外の場合はクリア テキストになります)。そのため、ブラウザーと STS の間の対話には常に SSL が推奨されます。

平文であっても、トークンはデジタル署名されているため、改ざんできないことに注意してください。

于 2010-05-25T16:05:52.633 に答える
13

それはあなたが尋ねた興味深い質問です。なんらかの理由で、Microsoft がこの "Windows Identity Foundation" フレームワークを多くのドキュメントなしで発表したことは知っています。私はこれを知っています。なぜなら、それを新しいプロジェクトで使用する方法を理解し、それを既存のインフラストラクチャと統合することを任されたからです。私は良い情報を探して何ヶ月もウェブを検索してきました。

あなたが説明した問題を解決するために、私は多少異なる角度を取りました。

私は既存のログオン アプリケーションを利用して、Microsoft の WIF 配管をそれに統合しました。つまり、ユーザーがログインするアプリケーションがあるということです。ログオン アプリケーションは、ユーザーによって提供された資格情報を別のサーバーに送信し、別のサーバーはユーザー ID を返します (またはログオンの失敗を示します)。

Microsoft の例のいくつかを見ると、彼らは次のことを行っていることがわかります: SignInRequestMessage(証明書利用者アプリケーションによって生成された) クエリ文字列から a を構築し、カスタム クラスからセキュリティ トークン サービスを構築し、最後に現在の httpcontext で FederatedSecurityTokenServiceOperations.ProcessSignInresponse を呼び出します。応答。残念ながら、ここではうまく説明できません。コードサンプルを見る必要があります。

私のコードの一部は、コード サンプルに非常に似ています。独自のロジックの多くを実装することに関心がある場所は、GetOutputClaimsIdentity. これは、ログインしているユーザーを記述するクレーム ID を構築する関数です。

さて、あなたが本当に知りたいと思っていることは次のとおりです。これは、Microsoft がドキュメント (AFAIK) で説明していないことです。

ユーザーがログインすると、証明書利用者アプリケーションにリダイレクトされます。ログオン アプリケーションの動作に関係なく、WIF クラスはユーザーのブラウザーに応答を送信します。この応答には、トークン署名証明書とユーザーの要求を含む "非表示の" HTML 入力が含まれています。(クレームはクリア テキストになります)。この応答の最後に、証明書利用者の Web サイトへのリダイレクトがあります。このアクションは「フィドラー」でキャプチャしたからこそわかる

証明書利用者の Web サイトに戻ると、WIF クラスが (コードが実行される前に) 応答を処理します。証明書が検証されます。既定では、(Visual Studio から証明書利用者アプリケーションで [STS 参照を追加] をクリックして) FedUtil.exe を使用して証明書利用者 Web サイトをセットアップした場合、Microsoft のクラスは証明書の拇印を検証します。

最後に、WIF フレームワークは、ユーザーの要求を含む Cookie をユーザーのブラウザーに設定します (私の経験では、Cookie 名は "FedAuth" で始まります)。Cookie は人間が読み取れるものではありません。

これが発生したら、必要に応じて、ClaimsAuthenticationClass. これは、コードが再び実行される場所です。

これはあなたが説明したものとは異なることは知っていますが、このセットアップは機能しています。これが役立つことを願っています!

ps。Windows Identity Foundation について私が尋ねた他の質問を確認してください。

更新: 以下のコメントで質問に答えるには:

私が省略したことの 1 つは、ユーザーがログインしているアプリケーションの URL を含むクエリ文字列を使用したリダイレクトによって、STS ログオン アプリケーションへのリダイレクトが行われることです。このリダイレクトは、ユーザーが認証を必要とするページに初めてアクセスしようとしたときに自動的に発生します。または、モジュールを使用して手動でリダイレクトを実行できると思いWSFederationAuthenticationます。

私はこれを試みたことはありませんが、アプリケーション自体の中でログオン ページを使用したい場合は、フレームワークで次のものを使用できるようにする必要があると思います。

1) ライブラリ内に STS コードをカプセル化します。2) アプリケーションからライブラリを参照します。3) アプリケーション内にログオン ページを作成します。そのようなページが認証を必要としないことを確認してください。wsFederation4) web.configのセクション内の要素の issuer プロパティをMicrosoft.IdentityModelログイン ページに設定します。

于 2010-04-19T19:33:53.410 に答える
4

あなたがしたいのは、アクティブなサインインです。WIF には、STS と直接通信してセキュリティ トークンを取得できるWSTrustChannel(Factory)が含まれています。ログイン フォームをこのように動作させたい場合は、WIF 4.0 SDK の「WSTrustChannel」サンプルに従うことができます。トークンを取得したら、次のコードはそのトークンを取得し、WIF ハンドラーを呼び出してセッション トークンを作成し、適切な Cookie を設定します。

public void EstablishAuthSession(GenericXmlSecurityToken genericToken)
{
    var handlers = FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers;            
    var token = handlers.ReadToken(new XmlTextReader(
                                        new StringReader(genericToken.TokenXml.OuterXml)));

    var identity = handlers.ValidateToken(token).First();
    // create session token
    var sessionToken = new SessionSecurityToken(
        ClaimsPrincipal.CreateFromIdentity(identity));
    FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
}

これが完了すると、サイトはパッシブ署名が発生した場合と同じように動作するはずです。

于 2010-06-29T17:47:10.503 に答える
1

FederatedPassiveSignIn コントロールを使用できます。

于 2010-08-26T11:52:47.680 に答える
0

次のようにCookieを設定します。FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken); 他のドメインへのSSOでは機能しません。

To cookieは、RPではなくSTSによって設定される必要があります。

于 2011-05-16T18:39:10.340 に答える