2010-03-23 64 views
5

我们有一个主要由不需要维护其状态的应用程序使用的REST应用程序,因此直到最后,我们一直保持安静“RESTFUL”而不保持状态。我们使用私有/公共(类似于亚马逊)进行身份验证。目前,客户端通过每个请求的凭证在REST应用程序中维护会话的方式

现在我们有一个新的要求,我们必须维护状态(或对话)。客户端可以是丰富的应用程序或手持设备。我试图用最好的方式来实现状态。我们应该传递一个会话ID并保持该ID ..是最好的和唯一的解决方案?

+2

为什么RIA或手持设备不能维护会话并从REST服务器获取资源?为什么要打破REST的核心规则?为什么不推动它所属的状态会话 - 在人机界面中? – 2010-03-23 19:20:41

+0

很好的问题,你有没有好的证书是通过每个请求发送证书,然后进行身份验证..这似乎是团队中一些我的家伙的决定因素 – romanianGeek 2010-03-23 20:13:21

+0

身份验证可以很容易地缓存服务器端并造成几乎为零的性能损失。 – Gandalf 2010-03-23 20:15:06

回答

3

传递会话ID不是唯一的方法,也不是维持会话状态的最佳方式。最好的方法是,如果你有一个RIA,就可以在的客户端本身上维护其所属的状态,如一些评论所暗示的。这意味着每个请求仍然发送凭证。

对每个请求重新认证是唯一的方法,如果您觉得服务器性能受到影响,服务器可以(如建议)在一段时间内缓存认证请求的结果。 Digest authentication可能有助于避免缓存响应通过加密签署通过电线的令牌。

如果这还不够好,你可以使用类似于Google ClientLogin的东西,并为客户端提供一个加密的令牌,可以在不需要授权的情况下进行验证,也不需要通过网络传递用户的真实凭据。通过https登录Google,然后通过http使用生成的令牌。它在令牌的整个生命周期内对重播攻击是开放的。

+0

+1用于指向摘要式身份验证的链接。 – Triztian 2011-04-28 16:30:30