链接是不是应该包含 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

HATEOAS 微服务的跨服务链接

JWT 是不是应该是一个单独的身份验证微服务,而不是与后端业务逻辑坐在一起?

为具有复合 ID 的实体自定义 HATEOAS 链接生成