Мы пытаемся использовать образец 4 ACS (из http://claimsid.codeplex.com/) в качестве шаблона для нашего проекта ADFS. У нас нет проблем с пассивными запросами к службам с аутентификацией ADFS. В примере провайдер федерации - это настраиваемая служба STS, и образец работает нормально.
Теперь мы хотим заменить настраиваемого поставщика федерации (Adatum FP в примере) нашим собственным ADFS.
Наша установка сейчас выглядит следующим образом (пространства имен скрыты)
- ServiceClient: Консольное приложение, вызывает сервисы
- Службы: WCF Webservice, одиночный метод, возвращающий строку. Это значение по умолчанию [Ordertracking.Services in sample]
- Services.Authentication: наш собственный поставщик удостоверений. Это значение по умолчанию [Litware.SimulatedIssuer в примере]
- ADFS: наш поставщик федерации [в примере FederationProvider.Adatum]
ServiceClient хочет вызвать Services, и из конфигурации он знает, что ему нужно получить токен с IP (Services.Authentication). Затем токен передается в ADFS, который проверяет токен и отправляет новый токен обратно в ServiceClient. Новый клиент передает токен FP службе, а служба (являющаяся проверяющей стороной в ADFS) проверяет токен на соответствие ADFS и выполняет метод службы.
Проблема:
Замена STS в примере на ADFS, похоже, нарушает интеграцию. Похоже, что мы получаем токен с IP-адреса правильно, но мы сталкиваемся с проблемами при передаче IP-токена в ADFS. Кажется, у нас проблема с Uri нашей аудитории, но мы добавили
https: // 'adfs fqdn' / adfs / services / Trust / 13 / IssuedTokenMixedSymmetricBasic256
Client Exception Мы получаем MessageSecurityException в клиенте с этим InnerException InnerException {"ID3242: токен безопасности не может быть аутентифицирован или авторизован."}
[System.ServiceModel.FaultException]: {"ID3242: The security token could not be authenticated or authorized."}
Data: {System.Collections.ListDictionaryInternal}
HelpLink: null
InnerException: null
Message: "ID3242: The security token could not be authenticated or authorized."
Source: null
StackTrace: null
TargetSite: null
Журнал отладки ADFS
<TraceRecord xmlns="http://schemas.microsoft.com/2009/10/IdentityModel/TraceRecord" Severity="Error">
<Description>Handled exception.</Description>
<AppDomain>Microsoft.IdentityServer.ServiceHost.exe</AppDomain>
<Exception>
<ExceptionType>Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</ExceptionType>
<Message>ID1038: The AudienceRestrictionCondition was not valid because the specified Audience is not present in AudienceUris. Audience: 'https://<adfs fqdn>/adfs/services/Trust/13/IssuedTokenMixedSymmetricBasic256'</Message>
<StackTrace>
at Microsoft.IdentityModel.Tokens.SamlSecurityTokenRequirement.ValidateAudienceRestriction(IList`1 allowedAudienceUris, IList`1 tokenAudiences) at Microsoft.IdentityModel.Tokens.Saml2.Saml2SecurityTokenHandler.ValidateConditions(Saml2Conditions conditions, Boolean enforceAudienceRestriction) at Microsoft.IdentityModel.Tokens.Saml2.Saml2SecurityTokenHandler.ValidateToken(SecurityToken token) at Microsoft.IdentityServer.Service.Tokens.MSISSaml2TokenHandler.ValidateToken(SecurityToken token) at Microsoft.IdentityModel.Tokens.WrappedSaml2SecurityTokenAuthenticator.ValidateTokenCore(SecurityToken token) at System.IdentityModel.Selectors.SecurityTokenAuthenticator.ValidateToken(SecurityToken token) at Microsoft.IdentityModel.Tokens.WrappedSamlSecurityTokenAuthenticator.ValidateTokenCore(SecurityToken token) at System.IdentityModel.Selectors.SecurityTokenAuthenticator.ValidateToken(SecurityToken token) at System.ServiceModel.Security.ReceiveSecurityHeader.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver, IList`1 allowedTokenAuthenticators, SecurityTokenAuthenticator&amp; usedTokenAuthenticator) at
....
</StackTrace>
</Exception>
</TraceRecord>
Мы добавили uri аудитории в наш IP Web.config:
<audienceUris mode="Always">
<add value="https://<adfs fqdn>/adfs/services/Trust/13/IssuedTokenMixedSymmetricBasic256" />
</audienceUris>
При необходимости мы можем разместить дополнительные файлы конфигурации и скриншоты конфигурации ADFS.