创建TOKEN系统以验证Web服务调用的最佳方法?

时间:2009-09-16 12:32:36

标签: web-services security authentication authorization token

我想创建一个可以通过各种平台调用的Web服务架构,例如移动设备,winforms应用程序,iphone,黑莓等。因此,使用像WCF和wsHttp绑定这样的东西可能会导致这种情况发生,我需要降级到basicHttp绑定以实现兼容性。

话虽如此,我需要一个系统在初始登录(身份验证)时生成令牌,然后使用此令牌进行所有后续调用,我想,验证身份验证并允许该方法执行。

任何人都有关于如何解决这个问题的提示或建议? 1)生成令牌以及安全令牌中涉及的内容? 2)令牌有多长时间,一些用户可能会使用他们的应用程序几个小时甚至可能“睡眠”他们的计算机

感谢您的建议。

2 个答案:

答案 0 :(得分:16)

如果您只使用服务器在初始身份验证时提供的一个令牌,则可以在任何请求被截获时使用该令牌。你唯一的防御就是到期时间。

除此之外,它取决于您的实施选项。

更安全的系统是为每个请求添加一个时间戳(可能还有一个nonce),对其进行签名,并在每个请求中包含该时间戳。它要求客户端处理身份验证凭据,了解签名实现,并签署每个请求。

您可以选择让服务器对每个请求进行身份验证(可以使用OpenID完成),也可以分发许多令牌,并在需要更多请求时重新进行身份验证(可以使用OAuth完成)。如果客户端可以存储凭据,则这些凭据对用户是不可见的。这些更复杂,需要加密传输(如SSL)进行某些交互,以及客户端可以说HTTP重定向并处理cookie或其他存储状态。客户端不必知道如何签名,但如果您可以执行SSL,则可能首先不需要复杂性。

如果您不需要与客户端无关,则可能需要签署请求。

要签署实施,示例和库,请查看Amazon Web Services,OpenID或OAuth。

关于令牌过期时间,这取决于您的需求。更长的令牌寿命会增加窗口重放攻击。随机数使用令牌一次性使用,但在服务器上需要更多状态。

答案 1 :(得分:3)

你应该看看OAuth。它是API身份验证的标准,您可以将现有实现插入您的服务中。