存储跨域Web服务访问凭据的最佳实践是什么?

6
我正在开发一个应用程序,将使用Web服务连接到各种远程服务器,以检索有关这些(Windows)机器的某些状态信息。在单个域内工作得很好,可以使用Windows身份验证,并确保调用服务的用户具有正确的凭据。但是,如果我们跨越域工作,那么这种方法就行不通了-我们需要在应用程序端存储一组具有必要权限的用户凭据。
是否有一种标准方法来存储这些凭据,例如在Windows中的集中密码存储或方便的内置库来提供此类功能?如果没有,保持中央计算机上的密码安全并确保在调用这些服务时远程机器凭据可用的最佳方法是什么?
我希望这个应用程序主要安装在Windows Server操作系统之一上-2003或2008-如果这对可用性有任何影响。
2个回答

4

3
我假定这不是关于Silverlight或Flash应用程序的问题,因为它们会有一些特殊的事情...
我已经使用过芬兰金融服务联合认证系统(由所有主要芬兰银行使用)。它是这样运作的:
你的客户端和服务器都有一个秘密密钥(或两个密钥)。
你可以把它存储到Windows注册表中的自定义位置(在.NET中很容易,并且你可以控制注册表访问)。不要把密钥硬编码到代码中,因为否则有人可以使用反射来获取它。此外,如果平台不足够安全,一个文件夹中的自定义xml文件可能是危险的。
然后,我们有了请求,比如WebService REST Url,还有一些id: http://myserver/MyItems/15 现在,我们需要使用时间戳和单向哈希算法。 有许多可用的算法,例如md5,SHA1,SHA512等(也内置于Microsoft .NET库中)。 我们计算id和时间戳(以及可能的其他参数)的哈希值。
简单来说,这些算法的工作原理类似于模算法:假设我的 id 是 11,秘密密钥是 3,则模 11%3=2,现在哈希值为 2,如果你知道 id(11)和哈希值(2),你就无法获取秘密密钥。
真正的请求应该像这样: http://myserver/MyItems/15?timestamp=20110304171900&hash=89A234BA645FD56 服务将检查哈希值。如果某些黑客有足够的时间,他们可以猜出有效的请求。 但是服务还会检查时间戳是否正确,例如在 5 分钟之前和 5 分钟之后。 因此,您不能调整请求,因为它会修改哈希值。
当然,还有一件事就是使用 SSL 协议。否则,您的请求可能会被从随机代理服务器读取。
我还建议使用 Windows Identity Foundation,但这是另一个选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接