1

セキュリティで保護された METRO 2.1 Web サービスがあり、それを使用できる .NET (3.5) クライアントを開発したいと考えています。WS が保護されていない場合は既に成功していますが、取得したら

セキュリティ メカニズムはUsername Authentication with Symmetric KeyDevelopment Defaults

.NET でセキュリティを設定するにはどうすればよいですか? METRO ガイドを読んでいますが、サンプルへのリンクが壊れているだけで、ガイドを読み進めることができませんでした。でプロキシ クラスの生成に成功しましたがsvcutil、その使用方法がわかりません。

svcutil 警告:

警告 1 カスタム ツールの警告: エンドポイントのセキュリティ ポリシーがインポートされました。セキュリティ ポリシーには、Windows Communication Foundation 構成では表現できない要件が含まれています。生成された構成ファイルで必要な SecurityBindingElement パラメーターに関するコメントを探します。コードを使用して正しいバインド要素を作成します。構成ファイルにあるバインド構成は安全ではありません。

警告 2 カスタム ツールの警告: wsam:Addressing 要素には wsp:Policy 子要素が必要ですが、子要素がありません。

編集

私はこれを解決することに本当に近づいています(私は思う)。デフォルトの GlassFish 証明書をkeytool.exe次のようにエクスポートしました。

keytool -exportcert -alias xws-security-server -storepass changeit -keystore keystore.jks -file server.cer 
keytool -printcert -file server.cer //This line shows it's content

server.cerクライアント側で証明書を使用します:

KDTreeWSClient wsClient = new KDTreeWSClient();
X509Certificate2 server_cert = new X509Certificate2("FullPathToCertificate/server.cer", "changeit");
wsClient.ClientCredentials.ServiceCertificate.DefaultCertificate = server_cert;
wsClient.ClientCredentials.UserName.UserName = "wsitUser"; //Default GF username
wsClient.ClientCredentials.UserName.Password = "changeit"; //Default GF password

質問MessageSecurityExceptionエンドポイントの予想される DNS ID は ですが、エンドポイントには があるため、この結果は にlocalhostなりますxwssecurityserverlocalhost/xwssecurityserver手動で設定できますか?

どんな助けでも大歓迎です!前もって感謝します、ダニエル

4

3 に答える 3

1

以下の説明に従って、クライアント アプリケーションの構成ファイルに DNS ID を設定してみてください。

      <endpoint address="http://localhost:8080/SecureCalculatorApp/CalculatorWSService"
          binding="customBinding" bindingConfiguration="CalculatorWSPortBinding1"
          contract="ServiceReference3.CalculatorWS" name="CalculatorWSPort1">
        <identity>
          <dns value="{YOUR ALIAS}" />
        </identity>
      </endpoint>

dns 値として「xwssecurityserver」を設定します。私の場合、それは機能します(ちなみに、この問題を解決するときにあなたの質問をベースとして使用したので、正しい方法を指摘してくれてありがとう:))

于 2011-04-21T08:08:54.620 に答える
0

これは私がクライアントを構成した方法です:

Uri uri = new Uri("http://localhost:8080/JavaWSJMX/KDTreeWSService");
X509Certificate2 server_cert = new X509Certificate2("C:/../server.cer", "changeit"); //Second param is the certificate's password
AddressHeader[] ah = new AddressHeader[0];
EndpointAddress ea = new EndpointAddress(uri, EndpointIdentity.CreateX509CertificateIdentity(server_cert), ah);
KDTreeWSClient wsClient = new KDTreeWSClient("KDTreeWSPort", ea);

KDTreeWSPortから取得できるはどこendpointConfigurationNameにありますか.config:

<client>
  <endpoint address="http://localhost:8080/JavaWSJMX/KDTreeWSService"
    binding="customBinding" bindingConfiguration="KDTreeWSPortBinding"
    contract="KDTreeWS" name="KDTreeWSPort" />
</client>

この後、設定する必要がありますClientCredentials

//The server uses this certificate
wsClient.ClientCredentials.ServiceCertificate.DefaultCertificate = server_cert;
//These are the default credentials on GlassFish v3.1
wsClient.ClientCredentials.UserName.UserName = "wsitUser";
wsClient.ClientCredentials.UserName.Password = "changeit";

そして、METRO Web サービスを呼び出すことができるはずです! svcutil で生成した Proxy クラスを使っているので、ServiceReference.

于 2011-04-08T16:21:41.930 に答える
0

これは実際にはあなたの問題ではないと思いますが、発生しているツールの警告のトラブルシューティングに役立つ場合があります。2 番目のメッセージは、漠然とした見覚えがあります。カスタム フォールト例外を公開する Java WS と通信する SOAP 1.1 クライアントがありました。Java サービスでエラーが発生すると、スタック トレースがエラーに追加され、SOAP 1.2 サービスのみがサポートする複数の子要素をサポートしていないため、.NET クライアントが異常終了しました。私たちの Java 開発チームと話し合ったところ、Tomcat (または Java のどちらかは思い出せません) にデバッグ設定があり、それを無効にできるため、スタック トレースが含まれていないことがわかりました。その後、障害は正しく伝播されました。申し訳ありませんが、これ以上の支援はできませんが、役立つ場合があります。

于 2011-04-06T05:55:30.283 に答える