у меня есть:
- Пассивное STS "приложение для входа", которое также является поставщиком удостоверений.
- Активная служба WCF STS, которая может принимать и обрабатывать токены ActAs
- проверяющая сторона веб-сайта
- проверяющая сторона службы WCF, вызываемая веб-сайтом.
Все это объединено с использованием Windows Identity Foundation и пользовательского кода STS. Active Directory (ADFS) не участвует.
Теперь я работаю:
- Пользователь пытается посетить веб-сайт RP.
- Пользователь перенаправляется на пассивный STS.
- Пользователь входит в систему, получает токен, перенаправляется обратно на веб-сайт RP.
- RP веб-сайта выполняет сервисный вызов RPF WCF и передает токен ActAs, чтобы произошло делегирование.
- Active STS видит входящий токен ActAs и правильно настраивает выходной идентификатор, поэтому основным идентификатором является токен ActAs, а идентификатор вызывающего абонента добавляется в цепочку акторов.
- WCF RP получает правильный токен со всем на месте, у текущего участника потока есть правильная идентификация и утверждения, как и должно быть.
Я хочу, чтобы WCF RP запросил дополнительные заявки от активного STS.
То есть в RST, который идет к активной STS, я хочу, чтобы он включал список утверждений, которые требуются службе, чтобы эти дополнительные утверждения можно было получить, если их еще нет.
Я понял, как это сделать, изменив привязку на RP-клиенте веб-сайта, но я хочу, чтобы требования были указаны в конце службы WCF RP.
У меня такое ощущение, что это связано с привязкой, которую я использую. У меня были проблемы с работой ws2007FederationHttpBinding с токенами ActAs, и все примеры в WIF Identity Training Kit использовали customBinding, поэтому я тоже это сделал, и в конце концов это сработало. Вот фрагмент конфигурации из WCF RP, показывающий мою конфигурацию привязки:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="CustomBinding_FederatedService">
<security
authenticationMode="IssuedTokenForCertificate"
messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10">
<issuedTokenParameters tokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1">
<issuer address="http://localhost:38901/ActiveSts.svc/IWSTrust13" />
<issuerMetadata address="http://localhost:38901/ActiveSts.svc/mex" />
</issuedTokenParameters>
</security>
<textMessageEncoding>
<readerQuotas maxArrayLength="32767" />
</textMessageEncoding>
<httpTransport />
</binding>
</customBinding>
</bindings>
</system.serviceModel>
Если я изменю конфигурацию на вызывающем веб-сайте, чтобы она указала в элементе ApplicTypeRequirements в разделе Кому выданоТокенПараметры, Active STS действительно видит список требуемых утверждений в RST ... но это на вызывающем веб-сайте, что проблематично для я.
Как мне сделать так, чтобы RP WCF мог указать дополнительные требования, которые ему требуются, без необходимости дублировать эту конфигурацию на вызывающем веб-сайте?
Если это действительно проблема с привязкой, было бы полезно, если бы вы могли показать мне эквивалентную конфигурацию с учетом того, что я получил выше. Я могу обновить веб-сайт и службу WCF с соответствующими изменениями, но опять же, мне нужен сервис (или поведение в службе, или конфигурация в службе), чтобы контролировать список требований, в которых он нуждается. Служба не должна принимать запросы, в которых отсутствуют требуемые претензии.