2013-06-23 2 views
2

У меня есть клиент WSE 3, который потребляет WSE 3 веб-сервис + STS:Преобразовать WSE 3 клиента WCF клиента

var stsService = new SecurityTokenServiceClient("https://stsurl"); 

var securityToken = stsService.requestSecurityToken("login", "password"); 

var st = new SecurityContextToken(securityToken); 
transferObject.RequestSoapContext.Security.Tokens.Add(st); 

Так маркер безопасности просто добавляется в коллекцию лексемы, и что мы можем назвать Повсеместно службы TransferObject.

Но теперь мне нужно реализовать аналогичного клиента, используя WCF. Вот код, который я пришел, к которому, к сожалению, приводит к ошибке Validation:

var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport); 

var client = new GeneratedClient(binding, new EndpointAddress("https://serviceurl")); 

client.ClientCredentials.IssuedToken.LocalIssuerBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport); 
client.ClientCredentials.IssuedToken.LocalIssuerAddress = new EndpointAddress("https://stsurl"); 
client.ClientCredentials.UserName.UserName = "login"; 
client.ClientCredentials.UserName.Password = "password"; 

client.ChannelFactory.ConfigureChannelFactory(); 

var channel = client.ChannelFactory.CreateChannel(); 
var requestWrap = new Services.SomeMethodRequest(); 
requestWrap.ListShipments = request; 
var response = channel.SomeMethod(requestWrap); 

Является ли это правильный способ потреблять аутентификации STS с помощью WCF?

ответ

0

Это должно поставить вас на правильном пути

 EndpointAddress endpointAddress = new EndpointAddress(OtherSTSAddress); 
    UserNameWSTrustBinding binding = 
     new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential); 

    WSTrustChannelFactory factory = new WSTrustChannelFactory(binding, endpointAddress); 
    factory.Credentials.UserName.UserName = UserName; 
    factory.Credentials.UserName.Password = Password; 
    factory.TrustVersion = System.ServiceModel.Security.TrustVersion.WSTrustFeb2005; 

    WSTrustChannel channel = (WSTrustChannel)factory.CreateChannel(); 

    RequestSecurityToken rst = new RequestSecurityToken(
     WSTrustFeb2005Constants.RequestTypes.Issue, 
     WSTrustFeb2005Constants.KeyTypes.Bearer); 
    rst.AppliesTo = new EndpointAddress(YourStsAddress); 

    SecurityToken token = channel.Issue(rst);