このチュートリアルのコードとこのコード サンプルのコードを使用して、.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.WSFederationAuthenticationModule
null になる理由と、これを防ぐために何ができるかを説明できますか?