2

Silverlight 対応の WCF サービスを使用して他の Web サービスやデータベースからデータを取得する Silverlight Web アプリケーションがあります。前の例では、エンド ユーザーはユーザー名とパスワードを TextBoxes に書き込んでボタンをクリックすることで、Web サイトにサインインしていました。現在、エンド ユーザーはカードとカード リーダーを持っています。Web サイトに入った後、認証プロンプトが表示される必要があります。そのため、Web サービスを変更し、HTTPS を使用しています。また、IIS で Web サイトの SSL 設定を Require に設定しました。もちろん、Web サイトの証明書も作成し、バインディングの証明書をそれに設定しました。すべてが正常に動作するようになりました。Web サイトと Web サービスは HTTPS で開いています。また、Web サイトにアクセスするたびに認証プロンプトが表示されます。すべての証明書がリストに表示された後、ユーザーはそれらのいずれかを選択する必要があります。

HTTPS を使用するように Web サービスを構成するためのこの記事を読みました。

ASP.NET では、次のような証明書を取得しています。

X509Certificate2 cert = new X509Certificate2(Request.ClientCertificate.Certificate);
string subject = Request.ClientCertificate.Subject;

if (!Request.ClientCertificate.IsValid || Request.ClientCertificate.Count == 0)
{
     // failed
}
else
{
     Session["isRegistered"] = true;
     // success
}

しかし、Web サービスを使用してリクエストから証明書を取得する方法がわかりません。ありがとう。

4

3 に答える 3

1

サービスにカスタム証明書バリデーターを実装するのが最善の選択肢のようです。これは基本的に、 X509CertificateValidatorから派生したクラスであり、構成ファイルを通じて登録されます。

この記事には、これを行う方法に関するより完全な情報があります。

于 2013-08-02T05:28:11.917 に答える
0

私はそれを考えます、私は問題を解決しました。次のように、Asp.net から Silverlight に要求オブジェクトの ClientCertificate プロパティを送信しました。

      <form id="form1" runat="server" style="height:100%">
        <div id="silverlightControlHost">
            <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
              ...
              <param name="initParams" 
value="ClientCertificate=<%=Request.ClientCertificate.Subject %>, cc=true, m=/relative" />
              ...
        </form>

App.xaml.cs では、Application_startup イベントで値を取得しています。

private void Application_Startup(object sender, StartupEventArgs e)
        {
            if (e.InitParams != null)
            {
                foreach (var item in e.InitParams)
                {
                    this.Resources.Add(item.Key, item.Value);

                }
            }

            this.RootVisual = new MainPage();
        }
于 2013-08-02T08:50:27.340 に答える
0

You can find the security context of the WCF request in the System.ServiceModel.OperationContext.Current object, especially in the ServiceSecurityContext field.

于 2013-08-02T08:47:27.127 に答える