バックエンドとして WCF サービスを使用して、ASP.NET フロントエンドでソリューションを開発しました。現在、Web サイトは ADFS 1.0 を使用して認証されています (ADFS の実装を制御することはできませんが、Web アプリケーション用に構成されています)。また、ADFS 2.0 にアップグレードするオプションはありません (少なくとも近い将来には)。
このための Web.config の構成は次のとおりです。
<httpModules>
<add name="Identity Federation Services Application Authentication Module" type="System.Web.Security.SingleSignOn.WebSsoAuthenticationModule, System.Web.Security.SingleSignOn, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null" />
</httpModules>
<membership defaultProvider="SingleSignOnMembershipProvider2">
<providers>
<add name="SingleSignOnMembershipProvider2" type="System.Web.Security.SingleSignOn.SingleSignOnMembershipProvider2, System.Web.Security.SingleSignOn.PartialTrust, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" fs="https://urltoadfs/adfs/fs/FederationServerService.asmx" />
</providers>
</membership>
<websso>
<authenticationrequired />
<urls>
<returnurl>https://myapplication/</returnurl>
</urls>
<fs>https://urltoadfs/adfs/fs/FederationServerService.asmx</fs>
<isSharePoint />
</websso>
これは正常に機能し、ADFS のアカウントを使用してアプリケーションにアクセスできます。問題は、バックエンド WCF サービスにアクセスするために、このクレーム ID を WindowsIdentity に変換する必要があることです(偽装/委任で Windows 認証を使用します)。
ADFS 1.0 でこれを実現する方法はありますか? WIF (Windows Identity Foundation) を使用してみましたが、STS として ADFS 1.0 と併用できるかどうか明確な情報が見つかりません。「Windows NT トークン ベースのアプリケーション」オプション ( http://technet.microsoft.com/en-us/library/cc784956(v=ws.10).aspx )も調査しましたが、変更は避けたいと思います。可能であれば、現在の ADFS 実装で。
WIF オプションをテストするために、Web.config で次の構成を使用しました (websso の部分を削除しました)。
<httpModules>
<add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="ClaimsAuthorizationModule" type="Microsoft.IdentityModel.Web.ClaimsAuthorizationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpModules>
<microsoft.identityModel>
<service>
<audienceUris>
<add value="https://myapplication/" />
</audienceUris>
<applicationService>
<claimTypeRequired>
<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" optional="true" />
</claimTypeRequired>
</applicationService>
<securityTokenHandlers>
<add type="Microsoft.IdentityModel.Tokens.Saml11.Saml11SecurityTokenHandler, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<samlSecurityTokenRequirement mapToWindows="true" useWindowsTokenService="true" />
</add>
</securityTokenHandlers>
<federatedAuthentication>
<wsFederation passiveRedirectEnabled="true"
issuer="https://urltoadfs/adfs/fs/FederationServerService.asmx"
realm="https://myapplication/"
requireHttps="true" />
</federatedAuthentication>
</service>
</microsoft.identityModel>
また、Web サーバー上で「Claims to Windows Token Service」(c2WTS) を実行しています。
ADFS サーバーにリダイレクトされますが、サーバーから一般的なエラーが表示されます。