链接是不是应该包含 HateOAS 中的身份验证令牌?
Posted
技术标签:
【中文标题】链接是不是应该包含 HateOAS 中的身份验证令牌?【英文标题】:Should links contains the authentication token in HateOAS?链接是否应该包含 HateOAS 中的身份验证令牌? 【发布时间】:2013-11-11 12:11:43 【问题描述】:我正在使用 Spring MVC 和 Spring HateOAS 来制作一个安静且无状态的 JSON API。
一切正常。但我有一个“概念”问题。我的 API 在每个请求中都使用身份验证令牌。例如,您使用登录 API 来获取您的身份验证令牌,当您调用我的 API 时,您必须像这样使用它:
http://some_host/api/foo/bar?token=abcd
API 始终响应 JSON,并且通过 Spring HateOAS 生成链接。例如:
"label" : "foo",
"links" : [
"rel" : "self",
"href" : "http://some_host/api/foo/bar/1234656"
]
问题是:我应该在生成的 URL 中添加身份验证令牌吗? (所以它将是http://some_host/api/foo/bar/1234656?token=abcd
)
我找不到任何建议或约定。
【问题讨论】:
【参考方案1】:通常,身份验证令牌通过标准 HTTP 标头(例如 HTTP Basic 或 Digest 中的 Authorization 标头)进行通信。另一种常见的方法是通过 cookie。在 Servlet 环境中,这通常是 JSESSIONID cookie。
一般来说,您不应该看到身份验证令牌作为请求 URL 的一部分传递。
【讨论】:
实际上,API 可以通过多种方式处理身份验证令牌。我们可以处理自定义 HTTP 令牌中的令牌,我们处理 HTTP 基本身份验证,我们处理查询字符串中的令牌。 我知道它可以处理查询字符串中的标记,但它可能不应该。我的观点是,您可能没有看到很多关于该主题的建议,因为很少有人这样做(他们使用标题)。【参考方案2】:这是一个老问题,但答案肯定是否定的。
http://some_host/api/foo/bar/1234656
应该是该资源的 uniform 标识符 (URI) 和位置 (URL)。这是您可以依赖的一个 URL。您始终可以使用该 URL 获取资源,但您将永远无法再次使用 http://some_host/api/foo/bar?token=abcd
获取资源,因为令牌将过期。
调用附加令牌的 URL 是一回事,但它不应该出现在链接中,因为它与资源无关。发送令牌是客户端的责任,而不是服务器的责任。
【讨论】:
以上是关于链接是不是应该包含 HateOAS 中的身份验证令牌?的主要内容,如果未能解决你的问题,请参考以下文章
如何在2个不同的环境中正确处理某些WSO2 ESB REST API的部署? (目前包含硬编码的HATEOAS链接)
将 HATEOAS 用于 RPC 样式的命令是不是是 RESTful
强制spring hateoas生成https链接而不是http