我应该通过 HTTP 标头或将正文作为 JSON 传递到 REST Api 吗?

Posted

技术标签:

【中文标题】我应该通过 HTTP 标头或将正文作为 JSON 传递到 REST Api 吗?【英文标题】:Should I pass Credentials via HTTP Header or Post body as JSON to REST Api? 【发布时间】:2016-12-28 19:14:01 【问题描述】:

我正在尝试使用基于令牌的身份验证来创建 Rest Api。

在将凭据从客户端传递到服务器以生成令牌方面是否有任何最佳实践。作为 HTTP 标头或作为帖子正文中的 JSON 字符串

我一直在寻找,但找不到任何具体的答案。

【问题讨论】:

【参考方案1】:

不要试图重新发明***。一个好的起点看这里: best-practices-for-securing-a-rest-api-web-service

对于我的 API 实现和我的需求,我选择了一个简单的 BasicAuth(发送带有标头的凭据)和任何其他令牌,以及我在每个请求中添加到 JSON 有效负载的安全相关数据。 不要忘记将 SSL 设置为强制。

【讨论】:

【参考方案2】:

我建议使用Open ID Connect 身份验证协议,更具体地说,使用实现此协议的第三方服务或实体库。 Open ID Connect 基于 OAuth 2 构建,现已广泛使用,支持各种开发语言和框架:http://openid.net/developers/libraries/

成功的身份验证步骤会生成一个“访问令牌”,然后可以将其传递给您的 REST API,在此验证其真实性。在 Open ID Connect 中,此令牌作为 HTTP 标头与 POST 正文进行传递。

如果您推出自己的协议,甚至开发自己的 Open ID Connect 实现,请注意细节,因为很容易忽略一些小问题,从而创建不安全的 API。有关我所指内容的示例,请参阅OAuth 2.0 Threat Model and Security Considerations。由于这个问题,我总是建议使用现有的、经过严格审查的实现。

【讨论】:

以上是关于我应该通过 HTTP 标头或将正文作为 JSON 传递到 REST Api 吗?的主要内容,如果未能解决你的问题,请参考以下文章

来自具有特定“接受”标头的请求的错误响应正文格式

具有自定义标头和请求正文作为 JSON 字符串的跨域 jquery ajax 请求

如何在使用 Cloud Scheduler 发出的 HTTP POST 请求上添加 JSON 正文?它会添加“Content-Type”:“application/json”标头吗?

使用 http 端点访问 lambda 中的 HTTP 请求(标头、查询字符串、cookie、正文)对象

BOOST ASIO POST HTTP REQUEST-标头和正文

如何通过 HttpClient 在 POST 请求中将 JSON 数据作为正文发送