【问题标题】:Sending HTTPOnly cookie in response using Rails API application使用 Rails API 应用程序发送 HTTPOnly cookie 作为响应
【发布时间】:2020-04-30 17:00:39
【问题描述】:

如果我错了,请纠正我,但 cookie 只是特殊的 Set-Cookie: 标头,对吧?也许我错过了一些东西,但对我来说似乎总是如此。如果我设置了 Rails API 应用程序并希望支持发送 HTTPOnly cookie(例如,标头还假设我有 CORS 和客户端设置上的所有内容等),我应该能够正确执行此操作吗?

基本上,我的问题是:

  1. ActionDispatch::Cookies 带回我的中间件并在我的应用程序控制器中添加include ::ActionController::Cookies 是否完全违背了API 应用程序的目的?
  2. 如果是这样,我可以手动通过标头发送 HTTPOnly cookie 吗?
  3. 如果是这样,手动管理 cookie 标头是否会更麻烦?如果我真正需要做的只是发送一个 HTTPOnly 刷新令牌,那么我是否将 cookie 中间件排除在外,是否需要手动处理它们?

【问题讨论】:

    标签: ruby-on-rails rails-api httponly cookie-httponly


    【解决方案1】:

    所以我不需要添加任何中间件或包含任何 cookie 类。我可以使用reponse.set_header 发送一个cookie。但是,这只允许您发送一个Set-Cookie 标头,因为它会覆盖您以Set-Cookie 作为键设置的最后一个标头。相反,您可以访问response.set_cookie,这将允许您为每个set_cookie 调用设置多个cookie。它还附带了一些选项,您可以设置这些选项,您必须将这些选项添加到您使用 set_header 手动发送的标头的值中。

    这是我使用的一个允许我发送 cookie 的示例:

    response.set_cookie(
      :jwt,
      {
        value: 'this could be a token or whatever cookie value you wanted.',
        expires: 7.days.from_now,
        path: '/api/v1/auth',
        httponly: true
      }
    )
    

    查看此方法的文档以获取其他选项,因为还有其他选项。

    编辑:我遇到了一个问题,即 cookie 在响应中被发送但未保存(仍然)。它没有出现在 cookie 存储中,所以我将 cookie 的路径更改为/,然后它就出现了。我删除了它,然后将 cookie 的路径更改为/my/real/path,它工作并存储在 cookie 存储中。去图吧。

    【讨论】:

    • 如果需要添加加密cookie怎么办?
    • @AliGhanavatian 好问题。使用本文档来确定如何执行此操作。 secure 我想这就是你想要的:apidock.com/rails/Rack/Response/set_cookie。如果没有,您可以在 cookie 中设置键/值对(我假设安全是您想要的)。
    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2021-11-03
    • 2020-11-19
    • 2012-02-11
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多