2

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.aspxSmartcardPKIはここには記載されていません。(ただし、ドキュメントは 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 の構成を変更する必要があるのでしょうか?

4

0 に答える 0