我正在阅读SSO,并使用本教程http://chris.59north.com/post/2013/04/09/Building-a-simple-custom-STS-using-VS2012-ASPNET-MVC.aspx创建自定义STS。
如果我理解STS机器上的正确安装了证书。重命名方发送x509签名的指纹。因此,依赖方将仅接受具有适当证书的STS的声明。这是对的吗?
如果是这样,我想实现每个依赖方都向STS发送STS安装证书。如果STS知道发送的证书,则STS会在请求中查找其可信赖的依赖方列表。
这个实施是一个好主意,这是一个好习惯吗?有没有一个好的资源来实现这个?
感谢
答案 0 :(得分:1)
实施自定义STS是一项艰苦的工作。我建议你看一下windows azure ACS或Thinktecture free STS作为起点 话虽如此,为依赖方单独提供证书是一种常见做法。但是,此证书的私钥通常存储在STS中的某个数据库中(ACS和Thinktecture都支持此功能)。依赖方只知道公钥。 然后,安全令牌(SAML2或JWT)由具有安全令牌的ac签名,并且依赖方可以使用公钥(或指纹)来验证签名。 另请注意,SAML2令牌也可以加密(在签名旁边),并且您可以使用不同的证书。 我个人会建议使用单独的证书,STS(或您的组织)有某种类型的网站是“任何人”可以将他们的应用程序注册为依赖方。如果您的所有依赖方都是“内部”应用程序,我至少会考虑使用单个证书来签署所有安全令牌。这样做的好处是,您可以在联合元数据文档(位于FederationMetadata / 2007-06 / FederationMetadata.xml)中发布(公共)密钥。如果您希望更新密钥,可以在那里更新密钥(首先在那里发布新密钥和旧密钥,然后只发布新密钥)。然后,依赖方可以根据此元数据更新密钥(adfs使用类似的方法)。 所以底线:每个RP有一个单独的证书是好的,但只有一个(用于签名 - 不加密)更容易更新。