我有一个自定义的STS与WIF构建。如果我将信赖方和STS放在同一台服务器上,我可以让它工作。
然而,在使用远程机器时,我得到了ID4036错误。当我深入研究它时,我发现在我的STS中,默认情况下总是用本地证书加密出站令牌,而不是信任方请求的证书。一种解决方案是在STS上安装依赖方使用的证书(仅限公钥),并对STS进行编码以使用该证书。
然而,当我在不同的服务器上添加其他依赖方时,这会产生问题。
下面是一个例子:
MySTS上的STS -使用SigningCert对令牌进行签名。
MyWebServer01上的依赖方-希望使用MyWebServer01Cert进行加密/解密(拥有公钥/私钥)
我可以在MySTS上安装MyWebServer01Cert,并将其设置为使用它来加密令牌,一切都应该正常工作。但是,假设我想要向MyWebServer02添加一个依赖方应用程序。除非我安装了MyWebServer01Cert的公钥和私钥,否则它不会工作。
我认为您可以简单地将公钥传输到STS,每个RP都可以使用自己的公钥-有点像SSL。难道不是这样吗?
如有任何帮助/建议,我们将不胜感激。
发布于 2011-07-23 01:01:54
首先,对于加密,只需要公钥。实际上,您永远不会想要泄露证书的私钥。
如果您使用WS联合协议(通常用于网站上的STS方案),则发送到STS的请求不是由您的RP服务器发送的,而是由用户的浏览器发送的。我不希望您调用告诉浏览器使用上一个站点的公钥来通过https进行通信。另一方面,加密令牌由rp服务器解密(意味着RP服务器必须知道用于加密令牌的证书的私钥)。
考虑到这种情况,我非常确定RP的证书的公钥必须存在于STS上,并且不能包括在请求中。其他一切都可能是一个肮脏的黑客工作,只与您的自定义STS (例如,包括公钥作为参数)。
至少对于“被动登录”的场景是这样的。对于WCF,您可以将服务器证书作为客户端证书附加到您的请求中。但我自己还没试过。
https://stackoverflow.com/questions/6791835
复制相似问题