2

WSE 3 Web サービス + STS を使用する WSE 3 クライアントがあります。

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

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

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

したがって、セキュリティ トークンが Token のコレクションに追加されるだけで、transferObject を介してサービスを呼び出すことができます。

しかし、今度は WCF を使用して同様のクライアントを実装する必要があります。ここで私がたどり着いたコードは、残念ながら検証エラーになります:

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);

WCF 経由で STS 認証を使用するのは正しい方法ですか?

4

1 に答える 1

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 );
于 2013-06-23T19:39:45.620 に答える