0

WCF サービスをセキュリティで保護しようとしていますが、問題が発生し続けています。ChannelFactory を使用して、Silverlight クライアントとサーバー間の接続を確立します。

私はもともと TransportWithMessageCredential を使用して、クライアントからサーバーにユーザー名とパスワードを送信していました。サービスをホストするサーバーと Silverlight クライアントが同じ URL である限り、これは機能していました。URL を変更すると、セキュリティ エラーが発生しました。エラーで提案されたような crossdomain.xml ポリシーをセットアップしましたが、問題は解決しませんでした。いくつかの調査の結果、クロスサイト呼び出しを使用してユーザー名を渡す場合、メッセージを保護するために証明書を使用する必要があることがわかりました。

現在、クライアントで証明書をセットアップしようとしています。クライアントはさまざまなオフィスで使用されているため、各マシンに証明書をインストールすることはできません。これを埋め込みリソースとして使用し、channelfactory の作成時に証明書を設定したいと考えています。これを行う例を見たことがありますが、これは次のことを示唆しています。

var channelFactory = new ChannelFactory<IYourService>();
channelFactory.Credentials.ClientCertificate.Certificate = 
                                     clientCertificate;

ただし、Credentials に ClientCertificate のプロパティが表示されません。ユーザー名しか表示されません。

私が間違っていることがありますか、それとも Silverlight ではこれができないのでしょうか?

4

1 に答える 1

0

問題は、私の clientaccesspolicy.xml ファイルが SSL をサポートするには正しくないことが判明しました。この問題を修正すると、TransportWithMessageCredential セキュリティ モードを使用できるようになり、クライアント証明書をインストールする必要がなくなりました。

このタイプの問題を抱えている場合、clientaccesspolicy は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
 <cross-domain-access>
   <policy>
     <allow-from http-request-headers="*">
       <domain uri="https://*"/>
       <domain uri="http://*"/>
     </allow-from>
     <grant-to>
       <resource path="/" include-subpaths="true"/>
     </grant-to>
   </policy>
</cross-domain-access>

于 2013-09-16T18:18:23.850 に答える