Wcf 如何使用客户端证书从acs检索令牌?

Wcf 如何使用客户端证书从acs检索令牌?,wcf,saml,servicebus,acs,Wcf,Saml,Servicebus,Acs,我想使用ACS作为服务总线的STS。我已经设法使用ACS对web服务进行身份验证。然而,服务总线需要一个令牌,我不知道如何从ACS检索这样的令牌 简而言之,我希望我的客户机wcf服务能够通过使用与acs中存储为服务标识的证书(对应于服务总线-sb的证书)匹配的证书进行身份验证来使用服务总线 另外,我正在为服务总线使用netcprelaybinding 我想我可以使用来自acs的令牌,如果我可以使用客户端证书检索它…?通过WCF使用客户端证书凭据从acs获取令牌是一个受良好支持的场景 有一个ACS

我想使用ACS作为服务总线的STS。我已经设法使用ACS对web服务进行身份验证。然而,服务总线需要一个令牌,我不知道如何从ACS检索这样的令牌

简而言之,我希望我的客户机wcf服务能够通过使用与acs中存储为服务标识的证书(对应于服务总线-sb的证书)匹配的证书进行身份验证来使用服务总线

另外,我正在为服务总线使用netcprelaybinding


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

通过WCF使用客户端证书凭据从acs获取令牌是一个受良好支持的场景

有一个ACS示例不提供WCF客户端证书身份验证,请查找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();
ChannelFactory-stringServiceFactory=newchannelfactory(Bindings.CreateServiceBinding(acsCertificateEndpoint),serviceEndpointAddress);
//设置服务凭据并禁用证书验证以使用示例证书
stringServiceFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode=X509CertificateValidationMode.None;
stringServiceFactory.Credentials.ServiceCertificate.DefaultCertificate=GetServiceCertificate();
//设置客户端凭据。
stringServiceFactory.Credentials.ClientCertificate.Certificate=GetClientCertificateWithPrivateKey();
该示例没有使用服务总线,只是一个简单的“IStringService”接口,但是如果您将NetCpreayBinding合并到绑定组合中,那么相同的机制应该适用于您的场景