我正在基于 Play Framework 2.X 为我的项目构建一些 RESTful API。
我的重点是我实现的身份验证机制。
目前,我使用SecureSocial。工作流程是:
- 匿名用户调用安全 API
- 服务器抓取任何 cookie Id(一种身份验证令牌)并检查 Play 2 缓存中的匹配。(缓存包含 cookie Id(随机生成)和用户 Id 之间的关联,可从数据库访问。
- 如果有任何匹配,则授权用户处理其预期的服务。
- 如果没有匹配,用户被重定向到登录页面,当填写有效凭据(电子邮件/密码)时,服务器将其相应的身份验证数据存储在 Play 2 缓存中,并发送仅包含自定义 Id(身份验证令牌)的新创建的 Cookie给用户,当然,通过 SSL 保护。
- 虽然 cookie/token 不会过期,但用户可以调用安全 api(当然,如果授权)
整个作品很棒。
但是,经过一番搜索,我发现了这篇文章,并且......我想知道我是否走对了。
事实上,处理 cookie(Play 术语中的“会话”)会打破 Restfulness 规则。因为一个真正被认为是无状态的 api 应该一次调用所有需要的数据(凭证/令牌等)。我实现的解决方案需要两个调用:一个进行身份验证,另一个调用安全 API。
我想把事情做好,我想知道一些事情:
Api 密钥的使用情况如何?我应该使用它们而不是这个
SecureSocial
工作流程来实施解决方案吗?Api Keys 将在每次 API 调用时发送,以保持安静。我考虑了一下,因为我希望我的 API 可以被一些 web 应用程序、手机和其他类型的客户端访问。没有人被迫管理cookies。OAuth 呢?我真的需要它吗?它会完全取代简单 api 密钥的使用吗?始终以多个客户端为目标,此已知协议将是管理身份验证和授权的好方法。
总之,我应该实施另一种机制以符合 Restful 标准吗?