2009-09-16 26 views
22

我想创建一个Web服务体系结构,可以通过各种平台调用,例如移动设备,winforms应用程序,iphone,黑莓,您可以将其命名。因此,使用WCF和wsHttp绑定之类的东西可能会导致这种情况,我需要降级到basicHttp绑定以实现兼容性。创建TOKEN系统以验证Web服务调用的最佳方法?

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

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

谢谢你的建议。

+1

我的问题是更多的是什么是最好的方式来回运输这个令牌来回,并与所有的电话,而不是如何认证。一旦服务器生成这个令牌(序列化类),将其附加到所有后续调用的最佳方式是什么?作为方法的一个参数,或者它可以作为头文件或其他东西附加,因此它对所有方法都是透明的(服务契约) – Neal 2010-01-25 00:21:10

回答

15

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

除此之外,它取决于你的实现选项。

更安全的系统是为每个请求添加一个时间戳(也可能是一个随机数),签名并包含每​​个请求。它要求客户端处理认证凭证,了解签署实施并签署每个请求。

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

如果您不需要客户端不可知,您可能需要签名请求。

对于签署实现,示例和库,请查看Amazon Web Services,OpenID或OAuth。

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

3

您应该检出OAuth。这是API认证的标准,您可能只需将现有的实施插入到您的服务中即可。

+0

OAuth协议允许您根据自己的喜好设置参数。我建议你看看一些服务提供商,看看他们用OAuth做了什么。 http://wiki.oauth.net/ServiceProviders – 2009-09-16 18:40:23

相关问题