Получение токена из ACS с использованием учетных данных сертификата клиента через WCF является хорошо поддерживаемым сценарием.
Существует пример 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();
В примере не используется служебная шина, это просто простой интерфейс "IStringService", но если вы включите свой NetTcpRelayBinding в состав привязки, те же механизмы должны применяться к вашему сценарию.