首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从请求中获取ClientCertificate (比较ASP.NET和Silverlight)

如何从请求中获取ClientCertificate (比较ASP.NET和Silverlight)
EN

Stack Overflow用户
提问于 2013-08-02 05:21:37
回答 3查看 4.1K关注 0票数 2

我有一个Silverlight Web应用程序,它使用启用Silverligh的WCF服务从其他Web服务和数据库获取数据。在前面的示例中,最终用户通过将其UserName和密码写入TextBoxes并单击按钮登录到网站。现在,终端用户有一张卡片和一个读卡器。进入网站后必须显示证书提示。所以,我改变了我的web服务,它使用HTTPS。在IIS中,我将SSL设置设置为网站所需的设置。当然,我也创建了网站证书,并将绑定的证书设置为它。现在一切都很好。网站和web服务正在以HTTPS开放。此外,每当进入网站时,都会显示证书提示。在列表中显示所有证书之后,用户必须从中选择一个证书。之后,他必须输入密码,如果证书存储中的数据与读卡器中的卡片相同,则webSite正在打开。

我读过关于配置web以使用HTTPS的文章。

在ASP.NET中,我们获得了这样的证书:

代码语言:javascript
运行
复制
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服务的请求中获得证书。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-02 08:50:27

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

代码语言:javascript
运行
复制
      <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事件中获得值:

代码语言:javascript
运行
复制
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();
        }
票数 0
EN

Stack Overflow用户

发布于 2013-08-02 05:28:11

看起来,您最好的选择是为您的服务实现一个自定义证书验证器。这基本上是一个从X509CertificateValidator派生的类,然后是通过配置文件的已注册

关于如何在这篇文章。上执行此操作,有更完整的信息

票数 1
EN

Stack Overflow用户

发布于 2013-08-02 08:47:27

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18009292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档