2

我有一个 Silverlight Web 应用程序,它使用启用 Silverligh 的 WCF 服务从其他 Web 服务和数据库获取数据。在前面,最终用户通过将用户名和密码写入文本框并单击按钮来登录网站。现在,最终用户拥有一张卡和一个读卡器。进入网站后必须出现认证提示。所以,我改变了我的网络服务,它使用了 HTTPS。在 IIS 中,我将 SSL 设置设置为网站要求。当然,我也创建了网站证书并将绑定证书设置为它。现在一切正常。网站和 Web 服务使用 HTTPS 打开。此外,每当进入网站时,都会显示认证提示。并且在所有证书都显示在列表中之后,用户必须选择其中之一。

我已阅读这篇文章,了解如何将 Web 服务配置为使用 HTTPS。

在 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

您可以在 System.ServiceModel.OperationContext.Current 对象中找到 WCF 请求的安全上下文,尤其是在 ServiceSecurityContext 字段中。

于 2013-08-02T08:47:27.127 回答
0

我认为,我已经解决了这个问题。我将请求对象的 ClientCertificate 属性从 Asp.net 发送到 Silverlight,如下所示:

      <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 回答