承载WIF身份提供商并为其生成自签名证书
问题描述:
对于我最后一年的项目,我开发了一个ASP.NET网站,并且已经使用Windows Identity Foundation实现了单点登录系统(以类似于教程显示在这里:http://www.primaryobjects.com/2013/08/08/using-single-sign-on-with-windows-identity-foundation-in-mvc-net)承载WIF身份提供商并为其生成自签名证书
这意味着我目前有2个网站,我的标识提供商站点和使用IP的网站,并包含大部分功能。IP使用X509证书来生成令牌,我已经能够使用自签名证书。这是我一直在使用检索从本地机器证书代码:
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
X509Certificate2Collection certificates = null;
store.Open(OpenFlags.ReadOnly);
try
{
certificates = store.Certificates;
var certs = certificates.OfType<X509Certificate2>().Where(x => x.SubjectName.Name.Equals(subjectName, StringComparison.OrdinalIgnoreCase)).ToList();
if (certs.Count == 0)
throw new ApplicationException(string.Format("No certificate was found for subject Name {0}", subjectName));
else if (certs.Count > 1)
throw new ApplicationException(string.Format("There are multiple certificates for subject Name {0}", subjectName));
return new X509Certificate2(certs[0]);
}
为了能够提出我的项目,我会被邀请主持它在网络上,但是这将意味着我需要替代我的自签名证书。
我可以使用诸如天蓝色网站之类的东西来托管我的网站,但目前我无法找到一个解决方案,使我能够在Azure等服务上生成自签名证书并以编程方式检索它。
你能否给我一个解决这个问题的建议?
答
理想情况下,您不必创建自己的IDP。你可以使用像ADFS这样的东西。
Azure AD是一个IDP并拥有自己的证书,因此您不需要创建任何证书。
所有你需要的是元数据,你可以在AppServices/Endpoints下找到URL。
有一个示例here但请注意,这使用WS-Fed OWIN而不是WIF。 (WIF有点老派)。
为了让您的生活更轻松,您可以通过向global.asax添加代码来更新web.config programmatically。
或者只是将整个解决方案移至Azure中的虚拟机。
是的,我明白你的意思,我同意,在一个真实世界的项目中,我不会通过自己建立一个提供者来浪费时间。我认为这是一个深入了解这个概念的机会,并为通常没有人会注意的应用程序的一部分添加了一个转折点。无论如何,谢谢你的建议。我会给那些Azure虚拟机看一看。 –