Мы пытаемся использовать образец ACS 4 (из http://claimsid.codeplex.com/) в качестве шаблона для нашего проекта ADFS. У нас нет проблем с пассивными запросами к службам с проверкой подлинности ADFS. В этом примере поставщик федерации - это пользовательский STS, и пример работает нормально.
Теперь мы хотим заменить настраиваемого поставщика федерации (Adatum FP в примере) на нашу собственную ADFS.
В настоящее время наша установка выглядит следующим образом (Пространства имен скрыты)
- ServiceClient: приложение консоли, вызовы Services
- Services: веб-служба WCF, метод Single, возвращающий строку. Это как по умолчанию [Ordertracking.Services in sample]
- Services.Authentication: наш пользовательский провайдер идентификации. Это по умолчанию [Litware.SimulatedIssuer в примере]
- ADFS: наш провайдер федерации [FederationProvider.Adatum в примере]
ServiceClient хочетдля вызова служб, и из конфигурации он знает, что должен получить токен от IP (Services.Authentication). Тогда токенпередается в ADFS, который проверяет токен и отправляет новый токен обратно ServiceClient.Новый клиент передает маркер FP в службу, а служба (являющаяся проверяющей стороной в ADFS) проверяет токен в ADFS и выполняет метод службы.
Проблема:
Замена STS в примере с ADFS, похоже, нарушает интеграцию.Кажется, мы правильно получаем токен с IP-адреса, но у нас возникают проблемы при передаче IP-токена в ADFS.Похоже, у нас есть проблемы с нашей Uri аудитории, но мы добавили
https://'adfs fqdn '/ adfs / services / Trust / 13 / IssuedTokenMixedSymmetricBasic256
Клиентское исключение Мы получаем 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.