【发布时间】:2017-03-05 17:35:16
【问题描述】:
最近我一直在阅读一些关于 HTTP JSON REST API 中 HATEOAS 实现的内容(因为我制作了一个),并且我了解链接和操作等的一般概念,并且定义了许多不同的格式,例如如 HAL、JSON API 等。
我还不明白 HATEOAS/REST 和身份验证之间的关系是什么,或者更具体的问题是,“正确的”HATEOAS/REST API 应该使用哪种类型的身份验证?
显然,它应该是无状态的,例如 JWT 令牌或类似的东西,但是是否有任何标准和/或规则/指南或者身份验证完全不同的主题?
编辑:
为了进一步澄清,我的问题不是我在选择要实现的身份验证时遇到问题,而是我不知道 API 身份验证需要什么才能将其称为 REST/HATEOAS API。
所以(假设的)场景是:创建一个在任何意义上都可以说是 REST/HATEOAS 的 API,并获得 1,000,000 美元。犯一个违反协议的小错误并获得 0 美元。这意味着,目标不是做最有意义、最高效或有利于开发人员和/或用户的事情,而只是做到毫无疑问的 100% REST/HATEOAS。
【问题讨论】:
-
REST 是一种架构风格,而不是其本身的架构。有许多可能的“正确”身份验证系统,即使您将自己缩小到仅基于 HTTP 的 REST。
-
@NicholasShanks 好的,感谢您澄清这一点。那么哪些是可能的“正确”的,为什么它们可能是“正确的”,哪些不是“正确的”,为什么? (我不是要一个完整的列表,只是事情的原理和一两个例子)
-
REST 说“使用统一接口”,这通过 HTTP 本质上意味着您应该使用 HTTP 的身份验证系统;不要例如将您的身份验证参数包装在 XML 请求正文的某个深处(就像 SOAP 一样)。因此,任何使用(错误命名的)授权标头的东西都可以与识别它的中介一起使用。我个人经常使用 Bearer (token) 认证:tools.ietf.org/html/rfc6750
-
其他使用 HTTPS 接口的身份验证系统是基于 Cookie 的(通常也是令牌系统,但没有共享标头命名法);并将用户名和密码放在 URL 中,你应该只考虑在专用网络上这样做,即使那样你也不应该这样做:-)
-
您需要满足所有 REST 约束 stackoverflow.com/a/25706876/607033 和所有相关标准,如 IRI、HTTP、JSON/XML/RDF 等。因此,它是关于寻找符合这些标准的身份验证解决方案。从 HATEOAS 开始,发送身份验证链接并不常见,这通常是硬编码到 REST 客户端的。我认为只有当你想在你的 REST 服务中支持多个身份验证方法并且你想让你的 REST 客户端发现他们可以支持的身份验证方法时,才有这样的链接才有意义。
标签: rest authentication hateoas