AD FS 3.0 с Thinktecture Identityserver 2 в качестве поставщика утверждений: события 197 и 364
У нас возникла проблема при переходе с AD FS 2.0 на AD FS 3.0.
У нас есть приложение ASP.NET MVC, которое использует федеративную аутентификацию через AD FS. В нашей тестовой среде мы настроили Thinktecture Identityserver 2 в качестве поставщика утверждений в AD FS. Запросы приложений authenticationType="urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI"
, Для справки, вот весь раздел идентификации нашего файла web.config:
<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 в качестве претензий. поставщик. Одно из отличий состоит в том, что теперь мы используем прокси-сервер AD FS на отдельном сервере, поскольку AD FS 3.0 требует этого (тогда как AD FS 2.0 этого не делал). На самом деле у нас есть два сервера AD FS, а затем два прокси-сервера за балансировщиком нагрузки. Thinktecture Identityserver 2 по-прежнему работает на старом сервере (в Windows Server 2008 R2).
Вот проблема: я просматриваю адрес приложения. Меня перенаправляют на AD FS, как и ожидалось, что быстро перенаправляет меня на Thinktecture Identityserver 2. Пока все хорошо. Я вхожу с именем пользователя ("Андерс") и паролем и возвращаюсь обратно в AD FS. Здесь я получаю общую страницу с сообщением об ошибке "Произошла ошибка". В журнале событий на сервере AD FS (балансировщик нагрузки, по-видимому, всегда направляет меня на один и тот же узел, который оказывается основным), я обнаружил две ошибки и одно предупреждение. Первая ошибка:
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
Тогда вторая ошибка:
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)
Я прочитал о поддерживаемых типах проверки подлинности SAML в AD FS на этой странице: https://msdn.microsoft.com/en-us/library/hh599318.aspx. SmartcardPKI здесь не указан. (Обратите внимание, что документация для AD FS 2.0.)
На серверах AD FS (как старых, так и новых) я попытался перечислить поддерживаемые типы аутентификации с помощью следующей команды PowerShell:
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 здесь тоже нет. Тем не менее он работает в старой среде.
Я также попытался использовать PasswordProtectedTransport вместо SmartcardPKI (путем редактирования файла web.config приложения MVC). Результат был точно таким же, за исключением того, что первое сообщение об ошибке теперь говорит:
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?