承载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中的虚拟机。

+0

是的,我明白你的意思,我同意,在一个真实世界的项目中,我不会通过自己建立一个提供者来浪费时间。我认为这是一个深入了解这个概念的机会,并为通常没有人会注意的应用程序的一部分添加了一个转折点。无论如何,谢谢你的建议。我会给那些Azure虚拟机看一看。 –