4

このチュートリアルのコードとこのコード サンプルのコードを使用して、.NET 4.5、MVC 4、およびカスタム サーバー側ログイン ページを使用してアクティブ リダイレクトを使用して FederatedAuthentication をまとめようとしています。

AccountController の LogOn メソッドへのリダイレクトは正常に機能し、メソッドは次のようになります。

public ActionResult LogOn()
{
    HrdClient hrdClient = new HrdClient();
    WSFederationAuthenticationModule fam = FederatedAuthentication.WSFederationAuthenticationModule; /*** Fails here because this is null **/
    HrdRequest request = new HrdRequest(fam.Issuer, fam.Realm, context: Request.QueryString["ReturnUrl"]);
    IEnumerable<HrdIdentityProvider> hrdIdentityProviders = hrdClient.GetHrdResponse(request);
    ViewData["Providers"] = hrdIdentityProviders;
    return View();
}

FederatedAuthentication.WSFederationAuthenticationModuleが null であるため、これは失敗します。

VS 2012 を使用して、新しい Identity and Access ウィザードを実行しました (古い STS ダイアログに取って代わるようです)。これにより、FederationMetadata のフォルダーが正しく表示され、Web.Config にいくつかの変更が加えられました。特に、モジュール セクションは次のようになります。

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
  <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
  <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
</modules>

そして、SOの回答8937123および8926099を見たので、次も追加しました。

 <httpModules>
  <add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpModules>

最後に、私の nuget パッケージの構成には、MVC アプリによって正しく参照されている Microsoft.IdentityModel が表示されます。

<packages>
  <package id="Microsoft.IdentityModel" version="6.1.7600.16394" targetFramework="net45" />
</packages>

また、social.msdn でこの質問を見たことがあります。これは、STS ダイアログを実行する必要があることを示唆しているようです。

FederatedAuthentication.WSFederationAuthenticationModulenull になる理由と、これを防ぐために何ができるかを説明できますか?

4

1 に答える 1

13

私はこれを自分で修正することができました.SOにはこれに似た未回答の質問がいくつかあるので、質問を残して自分の回答を投稿します.

問題は、MVC アプリケーションを .NET 4.5 にアップグレードすることです。WIF 機能の多くは (少なくとも表面的には) 同じままですが、クラスはすべて別のアセンブリに移動しました。ここの移行ガイドラインに従って問題を修正しました: http://msdn.microsoft.com/en-us/library/jj157089.aspx

最も重要なことは、パッケージ (v 3.5.0) への古い参照を削除し、バージョン 4.0 であり、外部パッケージではなく GAC に由来するおよびdllMicrosoft.IdentityModelへの同様の参照に置き換えられることを確認することです。System.IdentityModelSystem.IdentityModel.Services

修正する私の手順は次のとおりです。

  • Web.Config に追加したジャンクをすべて削除し、既定の MVC 構成ファイルからやり直します。
  • パッケージを削除しMicrosoft.IdentityModel、dll を逆参照します。
  • VS 2012 でアクセスと ID ウィザードを実行する
  • System.IdentityModel.Services.WSFederationAuthenticationModuleからの参照を複製し<system.webServer><modules>ます<system.web><httpModules>
  • 追加<authentication mode="Forms"><forms loginUrl="~/Account/LogOn" /></authentication>
  • 喜びの小さなジグをコンパイル、テスト、ダンス...

これにより、元の WIF3.5 / MVC3コード サンプルが.NET 4.5 で動作するようになりました。

于 2012-10-18T08:47:13.073 に答える