0

私は WIF にまったく慣れていないので、少し試してみるために、MVC4 アプリケーションで最も単純な「f5 エクスペリエンス」を試しました。私が見つけたチュートリアルによると、悲しいことに、ほとんどの場合.net 4.5より前のリリースを参照しているため、MVCアプリを作成し、IDとアクセスツールで構成し、f5を押してローカルSTSを起動して実行するだけです。それでも、制限されたページにアクセスしようとすると、常にホームページに戻ってしまうため、明らかな何かが欠けている可能性があります.

これが私がやったことです。これらの手順で問題を簡単に再現できます(WIF SDKを使用したWin8のVS2012。管理者権限でVSを起動してください):

  1. 新しい ASP.NET MVC4 インターネット アプリケーションを作成します。そのポートを 7777 に設定します (コモディティのために、ほとんどのコード サンプルで使用されているポート番号を選んでください)。

  2. すべての NuGet パッケージを更新します (これはオプションです)。

  3. ソリューションを右クリックし、ID とアクセスを選択して IP=local STS を設定し、[OK] をクリックします。次に、ID とアクセスのポップアップを再度開き、コントローラーの生成を選択して、[OK] をクリックします。

  4. Home コントローラの About アクションに [Authorize] 属性を追加します。

  5. F5 を押して、About リンクをクリックします。予想どおり、ログイン ビューが表示され、ログインするように求められます。唯一のオプションは、もちろん localSTS です。クリックすると、ホームページに戻り、認証が行われません。このプロセスを繰り返すことはできますが、何も変わらないため、セキュリティで保護された About ページにアクセスできません。

localSTS アンカーの基になるリンクは次のとおりです。

http://localhost:14743/wsFederationSTS/Issue?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a7777%2f&wctx=rm%3d0%26id%3d664ff3c2-95b1-40b3-b538-a8357233ea7e%26ru%3dhttp%253a%252f%252flocalhost%253a7777%252f&wct=2013-03-10T13%3a39%3a32Z

私の知る限り、そのパラメータは問題ないようです。

ネットワーク トラフィックを調べると、関連するアイテムが表示されません (よく理解していれば、IClaimsPrincipal を表す、現在のセッションのいくつかの Cookie を設定する応答が期待されます)。

(ところで、web.config を見ると、モジュールで WSFederationAuthenticationModule がSystem.Identity.Servicesから参照されていることがわかります。これは、ID とアクセスを構成した後のソリューションには含まれていません。これはツールのバグだと思います。とにかく参照を追加しましたが、何も変わりませんでした。)

アップデート

返信してくれてありがとう!トラフィックを調べると、関連する GET/POST は次のとおりです。私はクッキーを取得しません。テスト ソリューション全体を再作成しようとしましたが、上記の手順 2 をスキップして最小限に抑えましたが、何も変わりませんでした。

あなたの提案#2については、グローバルasaxに追加しようとしました:

        FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenValidated
            += (sender, e) => FederatedAuthentication.SessionAuthenticationModule.IsReferenceMode = true;

ただし、このコードの実行時に SessionAuthenticationModule が null であるため、対応する例外がスローされます。これに関する最新のコード サンプルや記事は見つかりませんが、WIF は非常に有望な技術のようです。私のようなセキュリティ初心者でも簡単にできるようにしたいと思います。私の主な目的は、MVC コントローラーと WebApi コントローラーの両方を提供するサイトに、幅広いコンシューマー (JS コード、モバイル アプリ、WinRT アプリ、サイト ページ自体など) に適用することです。なにか提案を?

(1) a GET which gets 307, temporary redirect

GET /wsFederationSTS/Issue?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a7777%2f&wctx=rm%3d0%26id%3d664ff3c2-95b1-40b3-b538-a8357233ea7e%26ru%3dhttp%253a%252f%252flocalhost%253a7777%252f&wct=2013-03-10T13%3a39%3a32Z HTTP/1.1
Host: localhost:14743
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22
Referer: http://localhost:7777/HrdAuthentication/Login?ReturnUrl=%2fHome%2fAbout
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: 

(2) GET with signin request:
GET /wsFederationSTS/Issue/?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a7777%2f&wctx=rm%3d0%26id%3d664ff3c2-95b1-40b3-b538-a8357233ea7e%26ru%3dhttp%253a%252f%252flocalhost%253a7777%252f&wct=2013-03-10T13%3a39%3a32Z HTTP/1.1
Host: localhost:14743
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22
Referer: http://localhost:7777/HrdAuthentication/Login?ReturnUrl=%2fHome%2fAbout
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: 

(3) a POST to the homepage: the respone is of course the homepage content; no cookies set.
POST / HTTP/1.1
Host: localhost:7777
Connection: keep-alive
Content-Length: 7063
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: http://localhost:14743
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:14743/wsFederationSTS/Issue/?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a7777%2f&wctx=rm%3d0%26id%3d664ff3c2-95b1-40b3-b538-a8357233ea7e%26ru%3dhttp%253a%252f%252flocalhost%253a7777%252f&wct=2013-03-10T13%3a39%3a32Z
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: 

ワーキングバリエーション

私はそれを機能させる方法を見つけました。おそらくこれは他の誰かに役立つかもしれません:ローカル IIS サーバーから VS 開発サーバーに変更せずに上記の手順に従うと、機能しているようで、まだホームにリダイレクトされますページ(なぜだろう:)、しかし認証されたユーザーとして。この時点で、[About] リンクをもう一度クリックして、効果的にページに入ることができます。

4

1 に答える 1

0

私はあなたの手順を再現し、すべてがうまくいきました。Chrome デバッガーは、次の 2 つの手順が必要であることを示しています。

GET  http://localhost:12263/wsFederationSTS/Issue/?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a54306%2f&wctx=rm%3d0%26id%3dc6e46b99-417b-49b6-96a0-40efcead898f%26ru%3dhttp%253a%252f%252flocalhost%253a54306%252f&wct=2013-03-10T18%3a14%3a19Z
POST http://localhost:54306/ with wa:wsignin1.0 and wresult:trust:RequestSecurityTokenResponseCollection

POST の結果は、FedAuth および FedAuth1 という名前の Set-Cookie です。Cookie のサイズ制限のため、Cookie は分割されます。

これをデバッガで確認してください。

ps同じ動作を見たら、Cookieが正常に設定されていません。問題は Cookie サイズにあり、ReferenceMode に切り替えることで解決しました。Application_Start に登録することを忘れないでください。

FederatedAuthentication.WSFederationAuthenticationModule.SessionSecurityTokenCreated 
+= this.WSFederationAuthenticationModule_SessionSecurityTokenCreated;
于 2013-03-10T18:41:26.120 に答える