AD FS 2.0 から AD FS 3.0 への移行で問題が発生しています。
AD FS によるフェデレーション認証を使用する ASP.NET MVC アプリケーションがあります。テスト環境では、Thinktecture Identityserver 2 を AD FS のクレーム プロバイダーとして構成しました。アプリケーションが要求しますauthenticationType="urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI"
。参考までに、web.config ファイルの ID セクション全体を次に示します。
<system.identityModel>
<identityConfiguration>
<claimsAuthenticationManager type="ProjectName.Authorization.AuthenticationManager, ProjectName" />
<claimsAuthorizationManager type="ProjectName.Authorization.AuthorizationManager,ProjectName" />
<audienceUris>
<add value="https://applicationdomain/" />
</audienceUris>
<securityTokenHandlers>
<securityTokenHandlerConfiguration saveBootstrapContext="true">
<issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<trustedIssuers>
<add thumbprint="(thumbprint of ADFS certificate)" name="ADFS Test" />
</trustedIssuers>
</issuerNameRegistry>
</securityTokenHandlerConfiguration>
</securityTokenHandlers>
</identityConfiguration>
</system.identityModel>
<system.identityModel.services>
<federationConfiguration>
<wsFederation freshness="120" passiveRedirectEnabled="true" issuer="https://adfsdomain/adfs/ls" realm="https://applicationdomain/" requireHttps="true" authenticationType="urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI" />
<serviceCertificate>
<certificateReference findValue="(thumbprint of application's certificate)" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
</serviceCertificate>
<cookieHandler requireSsl="true" />
</federationConfiguration>
</system.identityModel.services>
現在、Windows Server 2008 R2 と AD FS 2.0 を搭載したやや古いサーバーで実行していますが、動作します。最近、Windows Server 2012 R2 と AD FS 3.0 を実行するサーバーの新しい環境をセットアップしました。MVC アプリケーションを新しいサーバーにインストールし、AD FS 3.0 を別のサーバーにセットアップしました。古い AD FS 2.0 のように (私たちが知る限り)、MVC アプリを証明書利用者として、Thinktecture Identityserver 2 をクレームとして構成しました。プロバイダー。1 つの違いは、AD FS 3.0 ではこれが必要なため (AD FS 2.0 では必要なかった)、別のサーバーで AD FS プロキシを使用するようになったことです。実際、2 つの AD FS サーバーがあり、ロード バランサーの背後に 2 つのプロキシがあります。Thinktecture Identityserver 2 は、まだ古いサーバー (Windows Server 2008 R2) で実行されています。
問題は次のとおりです。アプリケーションのアドレスを参照します。期待どおりに AD FS にリダイレクトされ、すぐに Thinktecture Identityserver 2 にリダイレクトされます。ユーザー名 (「Anders」) とパスワードでログインすると、AD FS にリダイレクトされます。ここで、「エラーが発生しました」という一般的なエラー ページが表示されます。AD FS サーバーのイベント ログ (明らかに、ロード バランサーは、たまたまプライマリである同じノードに私を誘導するようです) で、2 つのエラーと 1 つの警告を見つけます。最初のエラー:
Event 197, AD FS
The Federation Service could not satisfy a token request because the
accompanying credentials do not meet the authentication type requirement of
'urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI' for the relying party
'https://applicationdomain.no'.
Authentication type:
Desired authentication type(s): urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI
Relying party: https://applicationdomain.no
This request failed.
次に警告:
Event 1000, AD FS
An error occurred during processing of a token request. The data in this event
may have the identity of the caller (application) that made this request. The
data includes an Activity ID that you can cross-reference to error or warning
events to help diagnose the problem that caused this error.
Additional Data
Caller: Anders
OnBehalfOf user:
ActAs user:
Target Relying Party: https://applicationdomain.no
次に、2番目のエラー:
Event 364, AD FS
Encountered error during federation passive request.
Additional Data
Protocol Name:
wsfed
Relying Party:
Exception details:
Microsoft.IdentityServer.Service.Policy.PolicyServer.Engine.InvalidAuthenticationTypePolicyException: Exception of type 'Microsoft.IdentityServer.Service.Policy.PolicyServer.Engine.InvalidAuthenticationTypePolicyException' was thrown.
at Microsoft.IdentityModel.Threading.AsyncResult.End(IAsyncResult result)
at Microsoft.IdentityModel.Threading.TypedAsyncResult`1.End(IAsyncResult result)
at Microsoft.IdentityModel.SecurityTokenService.SecurityTokenService.EndIssue(IAsyncResult result)
at Microsoft.IdentityServer.Web.WSTrust.SecurityTokenServiceManager.Issue(RequestSecurityToken request, IList`1& identityClaimSet)
at Microsoft.IdentityServer.Web.Protocols.PassiveProtocolHandler.SubmitRequest(MSISRequestSecurityToken request, IList`1& identityClaimCollection)
at Microsoft.IdentityServer.Web.Protocols.PassiveProtocolHandler.RequestBearerToken(MSISRequestSecurityToken signInRequest, Uri& replyTo, IList`1& identityClaimCollection)
at Microsoft.IdentityServer.Web.Protocols.WSFederation.WSFederationProtocolHandler.RequestBearerToken(MSISSignInRequestMessage signInRequest, SecurityTokenElement onBehalfOf, SecurityToken primaryAuthToken, SecurityToken deviceSecurityToken, String desiredTokenType, WrappedHttpListenerContext httpContext, Boolean isKmsiRequested, Boolean isApplicationProxyTokenRequired, MSISSession& session)
at Microsoft.IdentityServer.Web.Protocols.WSFederation.WSFederationProtocolHandler.BuildSignInResponseCoreWithSerializedToken(MSISSignInRequestMessage wsFederationPassiveRequest, WrappedHttpListenerContext context, SecurityTokenElement signOnTokenElement, Boolean isKmsiRequested, Boolean isApplicationProxyTokenRequired)
at Microsoft.IdentityServer.Web.Protocols.WSFederation.WSFederationProtocolHandler.SendSignInResponseForSecurityToken(GenericProtocolRequest originalRequest, SecurityTokenElement requestedTokenElement, ProtocolContext context)
at Microsoft.IdentityServer.Web.PassiveProtocolListener.ProcessProtocolRequest(ProtocolContext protocolContext, PassiveProtocolHandler protocolHandler)
at Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext context)
このページの AD FS でサポートされている SAML 認証の種類について読みました: https://msdn.microsoft.com/en-us/library/hh599318.aspx。SmartcardPKIはここには記載されていません。(ただし、ドキュメントは AD FS 2.0 用であることに注意してください。)
AD FS サーバー (古いものと新しいものの両方) で、次の PowerShell コマンドを使用して、サポートされている AuthenticationTypes を一覧表示しようとしました。
get-adfsproperties | select-object -expandProperty AuthenticationContextOrder | select-object -Property AbsoluteUri
古いサーバーと新しいサーバーの両方で、次のように出力されます。
urn:oasis:names:tc:SAML:2.0:ac:classes:Password
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient
urn:oasis:names:tc:SAML:2.0:ac:classes:X509
urn:federation:authentication:windows
urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos
ここにもSmartcardPKIはありません。古い環境で機能することは決して少なくありません。
また、 SmartcardPKIの代わりにPasswordProtectedTransportを使用してみました (MVC アプリケーションの web.config を編集して)。結果はまったく同じでしたが、最初のエラー メッセージは次のようになりました。
The Federation Service could not satisfy a token request because the
accompanying credentials do not meet the authentication type requirement of
'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport' for the
relying party 'https://applicationdomain.no'...
次に何を試すべきかについての指針は大歓迎です。AD FS 2.0 と 3.0 には違いがあり、Thinktecture IdentityServer 2 の構成を変更する必要があるのでしょうか?