1

在这篇文章之后,我创建了一个 WCF 客户端,它:

  1. 使用 ADFS 针对 AD 对用户进行身份验证。
  2. 向调用者提供 SAML2 票证。
  3. 使用提供的 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 标头时发生错误。

  1. 我需要在 ACS 中配置哪些内容才能使用 ADFS 提供的令牌?
  2. 我需要使用 ACS 提供的令牌,还是可以在服务中使用 ADFS 提供的令牌?(它似乎正在工作..)
4

1 回答 1

1

查看链接的ACS 示例,它似乎完全按照您的要求进行。

于 2012-10-12T00:10:34.250 回答