[英]C# Silverlight: How to get ID from within Silverlight using asp.net MVC
[英]How to get ClientCertificate from the request (comparing ASP.NET and Silverlight)
我有一个Silverlight Web应用程序,它使用启用了Silverligh的WCF服务从其他Web服务和数据库获取数据。 在以前的版本中,最终用户通过将其用户名和密码写入文本框并单击按钮来登录该网站。 现在,最终用户有了卡和读卡器。 进入网站后必须出现认证提示。 因此,我更改了我的Web服务,它使用了HTTPS。 然后在IIS中,将网站的SSL设置设置为Require。 当然,我也创建了网站证书,并将绑定证书设置为该证书。 现在一切正常。 该网站和Web服务正在使用HTTPS打开。 此外,每当进入网站时,都会显示认证提示。 在列表中显示所有证书之后,用户必须选择其中之一。 此后,他必须输入密码,并且如果证书存储区中的数据与读卡器中的卡相同,则将打开webSite。
我已经阅读了这篇文章,将Web Service配置为使用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 Service的请求中获取证书。 谢谢。
对于您来说,最好的选择似乎是为您的服务实现自定义证书验证器。 这基本上是一个从X509CertificateValidator派生的类,然后通过配置文件进行注册 。
您可以在System.ServiceModel.OperationContext.Current对象(尤其是ServiceSecurityContext字段)中找到WCF请求的安全上下文。
我认为,我已经解决了问题。 我将请求对象的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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.