我有:
- 一个被动的 STS“登录应用程序”,它也是一个身份提供者。
- 可以接受和处理 ActAs 令牌的活动 STS WCF 服务
- 网站依赖方
- 由网站调用的 WCF 服务依赖方。
所有这些都使用 Windows Identity Foundation 和自定义 STS 代码组合在一起。不涉及 Active Directory (ADFS)。
我现在的工作是:
- 用户尝试访问网站 RP。
- 用户被重定向到被动 STS。
- 用户登录,获得一个令牌,被重定向回网站 RP。
- 网站 RP 对 WCF RP 进行服务调用并传递一个 ActAs 令牌,以便进行委派。
- 活动 STS 看到 ActAs 令牌进入并正确设置输出身份,因此主要身份是 ActAs 令牌,调用者的身份被添加到 Actor 链中。
- WCF RP 在一切就绪的情况下获得正确的令牌,当前线程主体具有正确的身份和应有的声明。
我希望 WCF RP 向活动 STS 请求额外的声明。
也就是说,在进入活动 STS 的 RST 中,我希望它包含服务所需的声明列表,以便可以获取那些不存在的额外声明。
我已经通过修改网站 RP 客户端上的绑定来弄清楚如何做到这一点,但我希望在 WCF RP 服务端指定要求。
我觉得这与我正在使用的绑定有关。我在让 ws2007FederationHttpBinding 与 ActAs 令牌一起工作时遇到了麻烦,并且 WIF 身份培训工具包中的所有示例都使用了 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>
如果我更改调用网站上的配置以在issuedTokenParameters 部分中指示claimTypeRequirements,则Active STS 实际上确实会在RST 中看到所需声明的列表......但那是在调用网站上,这对我来说是有问题的。
如何使 WCF RP 可以指定它需要的其他声明,而不必在调用网站上复制该配置?
如果它确实是一个绑定问题,那么如果您可以根据我上面的内容向我展示等效配置,那将会有所帮助。我可以使用适当的更改来更新网站和 WCF 服务,但同样,我需要服务(或服务上的行为,或服务上的配置)来控制它需要的声明列表。该服务不应接受缺少所需声明的请求。