在这篇文章之后,我创建了一个 WCF 客户端,它:
- 使用 ADFS 针对 AD 对用户进行身份验证。
- 向调用者提供 SAML2 票证。
- 使用提供的 SAML2 票证调用 WCF 服务。
这很好用,但是我的问题的下一部分是扩展它以使用 Azure ACS。
我将 RP 添加到 ACS,并将 STS 引用更改为指向Add STS Reference
在 Visual Studio 中使用的 ACS。
我扩展了该Token.GetToken
方法,将令牌提供到以下方法中:
public static SecurityToken GetToken(SecurityToken adfsToken, string appliesTo, string idpEndpointAddress, out RequestSecurityTokenResponse rsts)
{
WS2007HttpBinding binding = new WS2007HttpBinding();
binding.Security.Message.EstablishSecurityContext = false;
binding.Security.Mode = SecurityMode.TransportWithMessageCredential;
WSTrustChannelFactory trustChannelFactory = new WSTrustChannelFactory(binding, new EndpointAddress(idpEndpointAddress));
trustChannelFactory.TrustVersion = TrustVersion.WSTrust13;
trustChannelFactory.ConfigureChannelFactory();
// Create issuance issuance and get security token
RequestSecurityToken requestToken = new RequestSecurityToken(WSTrust13Constants.RequestTypes.Issue);
requestToken.AppliesTo = new EndpointAddress(appliesTo);
WSTrustChannel tokenClient = (WSTrustChannel)trustChannelFactory.CreateChannelWithIssuedToken(adfsToken);
SecurityToken token = tokenClient.Issue(requestToken, out rsts);
return token;
}
到以下端点:
https://test.accesscontrol.windows.net/v2/wstrust/13/issuedtoken-symmetric
但我得到以下异常:
无法打开安全通道,因为与远程端点的安全协商失败。这可能是由于用于创建通道的 EndpointAddress 中缺少或错误指定了 EndpointIdentity。请验证 EndpointAddress 指定或暗示的 EndpointIdentity 是否正确标识了远程端点。
除了内部例外:
ACS10001:处理 SOAP 标头时发生错误。
- 我需要在 ACS 中配置哪些内容才能使用 ADFS 提供的令牌?
- 我需要使用 ACS 提供的令牌,还是可以在服务中使用 ADFS 提供的令牌?(它似乎正在工作..)