令牌是否基于Cookie Restful?

时间:2013-12-01 12:39:44

标签: api rest architecture restful-authentication securesocial

我正在为基于Play Framework 2.X的项目构建一些RESTful API。

我的重点是我实施的身份验证机制。

目前,我使用SecureSocial。 工作流程是:

  1. 匿名用户调用安全API
  2. 服务器获取任何cookie Id(一种身份验证令牌)并检查Play 2缓存中的匹配。 (缓存包含cookie Id(随机生成)和用户ID之间的关联,可从数据库访问。
  3. 如果有任何匹配,则授权用户处理其预期服务。
  4. 如果没有匹配,则将用户重定向到登录页面,当填写有效凭据(电子邮件/密码)时,服务器将其相应的身份验证数据存储在Play 2缓存中,并发送仅包含自定义ID的新创建的Cookie(身份验证令牌),当然,通过SSL保护。
  5. 虽然cookie /令牌未过期,但用户可以调用安全api(当然,如果获得授权)
  6. 整个作品很棒。

    然而,经过一些搜索后,我偶然发现了这个post,并且......我想知道我是否采用了正确的方式。

    事实上,处理cookies(Play游戏中的“会话”)会破坏Restfulness规则。 因为一个真正被认为是无状态的api应该立即调用所有需要的数据(凭证/令牌等)。我实现的解决方案需要两个调用:一个用于认证,另一个用于调用安全API。

    我想做得好,我想知道一些事情:

    • 使用Api密钥怎么样?我应该使用它们来代替这个SecureSocial工作流来实现解决方案吗? Api Keys将在每次API调用时发送,以保持安静。 我想到了,因为我希望我的API可以通过一些webapps,手机和其他类型的客户端来实现。没有人被迫管理cookie。

    • OAuth怎么样?我真的需要它吗?它会完全取代简单的a​​pi密钥的使用吗?总是有几个客户的目标,这个已知的协议将是管理身份验证和授权的好方法。

    总之,我是否应该实施另一种机制以使其符合Restful?

1 个答案:

答案 0 :(得分:1)

这是一个相当古老的问题,但仍然值得回答,因为它可能会引起其他人的兴趣。 REST确实要求无状态,但授权是实施时的常见例外。 您描述的解决方案需要一个授权过程,然后是基于授权cookie的大量服务调用。这类似于api键或OAuth。只要服务不具有高安全性并且您在合理的时间之后过期,cookie就没有错。 将OAuth集成到您的服务中听起来有点过分,仅当您将API公开给第三方(组织外)时才推荐使用。