免責事項:.NET N00BWCF .Net C#のWSSE(ダイジェスト付き) - 簡単な方法ですか?
私は無駄にこの外部のベンダーのWebサービスとセキュリティの仕事を取得しようとしている今日のカップルのための壁に頭を叩いてきました。
<wsse:UsernameToken wsu:Id="Example-1">
<wsse:Username> ... </wsse:Username>
<wsse:Password Type="..."> ... </wsse:Password>
<wsse:Nonce EncodingType="..."> ... </wsse:Nonce>
<wsu:Created> ... </wsu:Created>
</wsse:UsernameToken>
私はサービス参照を追加することによって開始し、多くの、多くのブログの記事を通じて、stackoverflowの質問:それは簡単に言えば、SOAPヘッダにこのような何かを追加し、セキュリティを、ダイジェスト彼らはWSSEを使用することが判明しますapp.configとコードを操作しています。私はちょうどそれを正しくするように見えなかった。多分それは容易に可能ではないでしょうか?たぶん、私はVisual Studio 2010と.Netについてよく分かりませんが、わかりません。ここで
は私のApp.configファイルにして停止したものです:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="ServiceHttpBinding" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportWithMessageCredential" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://vendorurl"
binding="basicHttpBinding" bindingConfiguration="ServiceHttpBinding"
contract="ContractName"
name="ServiceHttpPort">
</endpoint>
</client>
</system.serviceModel>
とC#:
var someService = new ServiceClient();
someService.ClientCredentials.UserName.UserName = "username";
someService.ClientCredentials.UserName.Password = "passwordgobbletygook/somemorebase64stuff=";
#region Begin Magic
var elements = someService.Endpoint.Binding.CreateBindingElements();
var securityBindingElement = elements.Find<SecurityBindingElement>();
securityBindingElement.IncludeTimestamp = false;
someService.Endpoint.Binding = new CustomBinding(elements);
#endregion
var response = someService.webMethod(param1, param2, param3, param4);
Console.WriteLine(response);
面白いことは、仕様のベンダーでは、ですが、私は、彼らが奨励することがわかりました
:WSSJの使用、ので、私は私はそれがここで2時間で働くようになった(Javaで)それを試してみたとは、それがどのように見えるかです
public class Test implements CallbackHandler { /** * @param args */ public static void main(final String[] args) throws Throwable { SomeService_Service someService_Service = new SomeService_Service(); SomeService someService = someService_Service.getSomeServiceHttpPort(); BindingProvider bindingProvider = (BindingProvider)someService; Map< String, Object > requestContext = bindingProvider.getRequestContext(); requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://vendorurl"); Client client = ClientProxy.getClient(someService); Endpoint endpoint = client.getEndpoint(); Map< String, Object > outProps = new HashMap< String, Object >(); outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN); outProps.put(WSHandlerConstants.USER, "username"); outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_DIGEST); outProps.put(WSHandlerConstants.PW_CALLBACK_REF, new Test()); WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); endpoint.getOutInterceptors().add(wssOut); System.out.println(someService.webMethod(param1, param2, param3, param4)); } public void handle(final Callback[] callbacks) throws IOException, UnsupportedCallbackException { WSPasswordCallback pc = (WSPasswordCallback)callbacks[ 0 ]; // set the password for our message. pc.setPassword("passwordgobbletygook/somemorebase64stuff="); } }
stackoverflowの土地に誰かがこれを.NETで動作するようにしていますか?私がここで紛失していることは明らかですか?
基本的な実装は次のようになります。私たちは昨年、Webサービスを開発しました。私たちは最終的にHTTPS:Sを介してBasic Authに切り替えるまで、数週間の実験でJavaパートナーを正しく接続できませんでした。私は、WS-Securityの仕様が実用には理想的ではないと感じています。 – mellamokb
興味深いコメント@mellamokb。私はそれがJavaでうまく動作するようになった、それは私が仕事に得ることができなかった.Netコードです。この特定のベンダー(Taleo)は、他の多くのソフトウェアクライアントと相互に関連しており、セキュリティのためにこれを使用しているため、そこにいる誰かが動作する必要があります。 – javamonkey79
私は何を意味するかを明らかにする。私は、.Netとnon.Netの言語間の相互運用を意味しました。 Java-to-Javaは、われわれが発見したように美しく動作し、.Net-to-.NETも同様に機能します。しかし、.NETをJavaにしようとしたとき、われわれはすべての種類の不明なエラーと条件に遭遇し、それをあきらめるまで頭を据えた。それは不可能だと言っているわけではありませんが、私はそのプロジェクトで苦労していることを覚えています。私はそれがどのように働くかを知ることに興味があります。私は自分自身のウェブサービスn00bの一部ですので、その一部になるかもしれません:) – mellamokb