API身份验证:将令牌放在Cookie或标头中?

时间:2016-01-21 23:07:54

标签: ruby-on-rails ruby api authentication cookies

在开发了我的第一个门户网站(使用railstutorial.org)之后,我现在正在构建我的第一个API(有一些帮助)。

门户网站的身份验证适用于session以及Cookie(如果用户希望记住他的登录信息)。

对于API,我理解使用session是不安全的;你只需要使用令牌。因此,就像门户网站一样,当用户登录API时,他的凭据会被检查,如果它们有效,则会生成一个令牌,摘要将存储到数据库中。

但是后来:我知道有三个选项如何处理令牌:使用 cookie 将令牌存储在用户的计算机上,将令牌包含为参数或使用 HTTP标头。我阅读使用HTTP标头的API是首选选项。

  • 如果使用 Cookie ,则与'记住我'相同。 Web门户的选项:令牌存储在cookie中,令牌的摘要存储在数据库中。对于每个API请求,都会读取cookie,并检查它是否与摘要匹配。
  • 每当API向用户发送数据或用户调用API时,该令牌都会包含为参数。我知道这会在URL中显示令牌,这是不可取的。
  • 我对使用 HTTP标头的理解失败。

使用HTTP标头发送令牌而不是cookie是什么意思?它背后的过程/逻辑是什么?何时使用cookie,参数或HTTP标题?
我的理解是,每次API向用户发送数据时,我都应该在HTTP标头中包含令牌吗?用户对API所做的每次调用都应该包含相同的令牌?

2 个答案:

答案 0 :(得分:0)

您应该了解Cookie的工作原理。设置cookie还会向客户端发送标准化的http标头。当客户端发送请求时,他们可以发送cookie以及请求。

rails中还有一个http标记的标准:Link这也是在请求中设置特定标头

答案 1 :(得分:0)

我认为此链接是一个很好的起点:http://devcenter.kinvey.com/rest/guides/security

此外,阅读HttpAuthentication :: Token的一些文档应该为您提供如何/何时应用它的基本概述。

http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Token.html