Silverlight 3和WPF中有一些应用程序与数据Web服务(基于WCF)进行通信。 有必要保护数据Web服务。只有已知用户才能访问数据。 解决方案无需外部访问即可在本地网络中运行。
客户端首先通过SSL连接到身份验证Web服务(提供用户名和密码)并获取安全令牌。之后,此令牌将传递给数据Web服务,以验证用户并获取对数据的访问权。
这是一个问题:如何将安全令牌的使用限制在最初发行它的机器上?
最初的想法是将安全令牌包含在客户端IP地址中,但在某些情况下可能会导致重新身份验证。例如,当用户计算机具有本地网络和Wi-Fi网络连接时。在这种情况下,从一个连接切换到另一个连接将导致更改客户端计算机的IP地址,因此安全令牌将变为无效。
有没有做这种事情的模式?
答案 0 :(得分:2)
将安全令牌绑定到计算机没有100%的方法:(
我们通常会假设,如果您拥有首先获得令牌的凭据,那么您就是优秀团队,我们相信您。毕竟,我们仍然允许您访问我们的数据。
我有几点想法:
澄清:尝试思考实验。即使您可以从Silverlight调用Win32 API获取机器信息并将其用于令牌,您仍然没有万无一失的解决方案。您的API调用可以虚拟化。就此而言,您的整个客户端计算机都可以进行虚拟化。有关此证明,请参阅Darknet纸张或现有的任何DRM系统。这不可赢得。
以下是如何限制某人从一支优秀团队中受到伤害的方法,让那些糟糕团队的人得到你的代币。你会在一段时间后过期令牌。然后你正在处理的场景是这样的:用户提供合法的用户/通行证,因此他们可以访问一定的时间(10分钟,10小时,10天,无论如何),你不会关心他们是来自Silverlight,AJAX还是Atari 2600 。 毕竟,他们只是证明了他们在用户/传球的良好团队中。这是一款你可以赢的游戏。
答案 1 :(得分:0)
如果客户端可以访问系统,请尝试读取硬盘序列号,网卡mac地址,主板序列号等,将它们组合在一起并生成散列。然后将此哈希与凭据一起发送以获取安全令牌。哈希也应该保存在服务器上。然后在所有后续请求中,客户端提交安全令牌以及刚刚生成的机器哈希。服务器验证凭据和散列。特别是,是否使用此特定哈希生成安全令牌。
一些工作,但它是可行的,而且很有趣。