2012-03-21 107 views
1

我想使用ACS作为服务总线的STS。我设法使用ACS进行Web服务的身份验证。但是,服务总线需要一个令牌,我不知道如何从ACS中检索这些令牌。如何使用客户端证书从acs检索令牌?

总之,我希望我的客户端wcf服务能够使用服务总线进行身份验证,该证书与在acs(与服务总线-sb相对应的服务身份)中存储的证书相匹配。

此外,我使用NetTcpRelayBinding服务总线。

我想我可以使用来自acs的令牌,如果我可以使用客户端证书检索它......?

回答

0

通过WCF使用客户端证书凭据从ACS获取令牌是一种很好的支持方案。

有一个ACS示例可以执行WCF客户端证书身份验证here,查找Acs2CertificateBindingSample。兴趣点是如何创建一个获得来自ACS令牌的绑定:

public static Binding CreateServiceBinding(string acsCertificateEndpoint) 
    { 
     return new IssuedTokenWSTrustBinding(CreateAcsCertificateBinding(), new EndpointAddress(acsCertificateEndpoint)); 
    } 

    public static Binding CreateAcsCertificateBinding() 
    { 
     return new CertificateWSTrustBinding(SecurityMode.TransportWithMessageCredential); 
    } 

,以及如何创建使用此绑定,以及如何指定客户端证书凭据通道工厂:

ChannelFactory<IStringService> stringServiceFactory = new ChannelFactory<IStringService>(Bindings.CreateServiceBinding(acsCertificateEndpoint), serviceEndpointAddress); 

// Set the service credentials and disable certificate validation to work with sample certificates 
stringServiceFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None; 
stringServiceFactory.Credentials.ServiceCertificate.DefaultCertificate = GetServiceCertificate(); 

// Set the client credentials. 
stringServiceFactory.Credentials.ClientCertificate.Certificate = GetClientCertificateWithPrivateKey(); 

该示例不使用服务总线,只是一个简单的“IStringService”接口,但如果将NetTcpRelayBinding并入绑定组合中,则相同的机制应适用于您的方案。