2012-03-21 4 views
1

Я хочу использовать ACS как STS для служебной шины. Мне удалось использовать ACS для аутентификации для веб-службы. Однако для служебной шины требуется токен, и я не знаю, как получить такой из ACS?Как получить токен из acs с помощью сертификата клиента?

Короче говоря, я хочу, чтобы мои клиентские службы wcf могли использовать служебную шину, путем аутентификации с сертификатами, которые соответствуют сертификатам, хранящимся в качестве служебных идентификаторов в AC (соответствующем служебной шине -sb).

Кроме того, я использую NetTcpRelayBinding для служебной шины.

Я думаю, я могу использовать токен из acs, если я могу просто получить его с помощью сертификата клиента ...?

ответ

0

Получение маркера из ACS с использованием учетных данных сертификата клиента над WCF является хорошо поддерживаемым сценарием.

Существует образец 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 в композицию привязки, те же механизмы должны быть применимы к вашему сценарию.