令牌身份验证与 Cookie

2023-12-05

令牌身份验证和使用 cookie 进行身份验证有什么区别?

我正在努力实施Ember Auth Rails 演示但我不明白使用令牌身份验证背后的原因,如Ember 验证常见问题解答关于“为什么令牌身份验证?”的问题


HTTP 是无状态的。为了授权您,您必须“签署”您发送到服务器的每个请求。

令牌认证

  • 对服务器的请求由“令牌”签名 - 通常这意味着设置特定的 HTTP 标头,但是,它们可以在 HTTP 请求的任何部分(POST 正文等)中发送

  • Pros:

  • 您只能授权您希望授权的请求。 (Cookie - 甚至为每个请求发送授权 Cookie。)

  • 不受 XSRF 影响(XSRF 的简短示例 - 我会在电子邮件中向您发送一个链接,如下所示<img src="http://bank.example?withdraw=1000&to=myself" />,如果您通过 cookie 身份验证登录bank.example, and bank.example没有任何 XSRF 保护手段,我会通过您的浏览器触发对该 URL 的授权 GET 请求来从您的帐户中提取资金。)请注意,您可以使用基于 cookie 的身份验证来执行防伪造措施- 但你必须实施这些。

  • Cookie 绑定到单个域。在域上创建的 cookiefoo.example域无法读取bar.example,同时您可以将令牌发送到您喜欢的任何域。这对于使用需要授权的多个服务的单页应用程序特别有用 - 这样我就可以在域上拥有一个 Web 应用程序myapp.example可以发出授权的客户端请求myservice1.example and to myservice2.example.

  • Cons:

    • 你必须将令牌存储在某个地方;而 cookie 则是“开箱即用”存储的。我想到的位置是 localStorage (缺点:即使关闭浏览器窗口后令牌也会保留)、sessionStorage (优点:关闭浏览器窗口后令牌将被丢弃,缺点:在新选项卡中打开链接将呈现该选项卡匿名)和 cookie(优点:关闭浏览器窗口后,令牌将被丢弃。如果您使用会话 cookie,您将在新选项卡中打开链接时进行身份验证,并且您不会受到 XSRF 的影响,因为您忽略了cookie 用于身份验证,您只是将其用作令牌存储。缺点:每次请求都会发送 cookie。如果此 cookie 未标记为仅限 https,则您很容易受到中间人攻击。)
  • 针对基于令牌的身份验证进行 XSS 攻击稍微容易一些(即,如果我能够在您的网站上运行注入的脚本,我就可以窃取您的令牌;但是,基于 cookie 的身份验证也不是灵丹妙药 - 而 cookie 标记为http-only 客户端无法读取,客户端仍然可以代表您发出请求,该请求将自动包含授权 cookie。)

  • 下载文件的请求(该文件应该仅适用于授权用户)需要您使用文件 API。对于基于 cookie 的身份验证,相同的请求开箱即用。

Cookie认证

  • 对服务器的请求始终通过授权 cookie 进行签名。
  • Pros:
    • Cookie 可以标记为“仅 http”,这使得它们无法在客户端读取。这对于 XSS 攻击防护效果更好。
    • 开箱即用 - 您无需在客户端实现任何代码。
  • Cons:
    • 绑定到单个域。 (因此,如果您有一个向多个服务发出请求的单页应用程序,您最终可能会做一些疯狂的事情,例如反向代理。)
    • 容易受到 XSRF 的影响。您必须实施额外的措施来保护您的站点免受跨站点请求伪造。
    • 针对每个请求发送(即使对于不需要身份验证的请求)。

总的来说,我认为令牌可以为您提供更好的灵活性(因为您不受单个域的约束)。缺点是你必须自己做一些编码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

令牌身份验证与 Cookie 的相关文章

随机推荐

  • iOS 10 中有新的设备标识符吗?

    有人在 iOS 10 中找到了唯一标识设备的新方法吗 我还没有看到任何提到该领域变化的文档 我想在向供应商标识符投降之前询问一下 如果您要向商店提交 则您留下的唯一真实标识符是 AdSupport 框架的广告标识符 如果您想进一步深入了解并
  • 基于数组对 NSFetchedResultsController 结果进行排序?

    我想构造一个基于数组内容的 NSPredicate 或 NSSortDescriptor 核心数据搜索 该数组将由以下部分组成userId s按正确的顺序 1 2 5 3 我想以相同的顺序呈现我的 NSFetchedResultsContr
  • Msys shell 命令更改文件的属性

    请告诉我一个可用于更改文件属性的 MSYS shell 命令 当我运行命令时ls l我得到以下信息 rw r r 1 lenovo Admin m4sugar m4 我想提供完整的访问权限 非常感谢任何帮助 Thanks cdhowie 是
  • Cloud Functions发送请求时是否使用相同的IP

    因此 我使用express js 在 Cloud Functions 上运行 Web 服务 API 我想知道云函数是否每次都使用相同的IP地址发送请求 我的用户正在发送请求并从 CF 获取响应 每次用户发送请求时 CF 都会向第三方 API
  • 如果 GPU 已使用,Cupy 在 multithread.pool 中会出现错误

    我尝试在程序的两个部分中使用 cupy 其中之一与池并行 我设法用一个简单的例子重现它 import cupy import numpy as np from multiprocessing import pool def f x retu
  • 如何从 iOS 应用程序拨打 WhatsApp 电话?

    我希望能够通过我的 iOS 应用程序使用 WhatsApp 号码拨打电话 我怎样才能做到这一点 您应该询问 WhatsApp 如何操作 解决方案在于 URL Schema https www whatsapp com faq de ipho
  • Java-> 的含义?

    完整的上下文是 public class RClass
  • Selenium Web 驱动程序元素单击在 Windows 10 中不起作用

    我正在使用 selenium webdriver 在 C 中创建自动化工具 该自动化在 Windows 7 上运行良好 但在 Windows 10 上运行不佳 ex driver FindElement By XPath button ty
  • Ruby facebook 图形 api appsecret_proof

    如何使用 Ruby 为 facebook graph api 创建 appsecret proof Facebook 有一个例子PHP 我还看到了 ruby 中的一个例子gist OpenSSL HMAC hexdigest OpenSSL
  • 在 git 中转义在文件名中添加前导“-”?

    在 git add 中 如何转义文件名中的前导 字符 例如 git add index apache html gives error unknown switch d Thanks 附言 同样对于 git checkout Use the
  • 生成具有固定度数的小世界网络

    我想生成一个固定度数为 10 的小世界网络 我尝试过 watts strogatz game 1 100 5 0 其结果是度数为 10 但每个节点只有 5 个邻居 我猜这是因为网络是无向的 有什么办法让它变得无向吗 The igraph包包
  • 转换为 Dalvik 格式失败并出现错误 1 ​​- 为什么?

    我只添加到现有的完全工作项目中 该文件com android vending billing IMarketBillingService aidl 我还没有添加任何其他内容 来自 market billing 示例 因为我什至还没有尝试使用
  • 基于多个字段的过滤列表

    我正在迭代一个职位列表 并且在此列表上实现了一个搜索 搜索正在运行 但现在它仅根据一个字段过滤列表 这是我的清单
  • 在 Node 中设置 AWS SDK 凭证

    我在为需要 aws sdk 的 React 应用程序设置 aws 凭证时遇到问题 我已在 aws credentials 路径中设置了我的凭证文件 我知道这是可以的 但是 我不知道如何在我的 jsx 文件中处理这个问题 我的理解是 SDK
  • 下载哪一个:JDK 还是 JRE? [复制]

    这个问题在这里已经有答案了 可能的重复 Java SE 6 与 JRE 1 6 与 JDK 1 6 这些意味着什么 我需要安装最新版本的 J2SE 所以现在我在下面的指定链接试图弄清楚如何继续 我收到的书的作者说要获取 J2SE 的更新版本
  • 使用 Picasso 将图像大小调整为全宽和固定高度

    我有一个垂直的 LinearLayout 其中一个项目是ImageView使用毕加索加载 我需要将图像的宽度增加到整个设备宽度 并显示按固定高度 150dp 裁剪的图像的中心部分 我目前有以下代码 Picasso with getActiv
  • Raudus 与 Ext Pascal:使用 ExtJS 的 Delphi Web 开发替代方案 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Delphi 开发人员有多
  • 评估包含未初始化指针的条件 - IN,但它会崩溃吗?

    我在论坛的某个地方遇到过这样的情况 Any attempt to evaluate an uninitialized pointer variable invokes undefined behavior For example int p
  • Git 配置文件:最佳实践

    我设法让 Git 与 Github 一起运行 现在 一年后 我想教小组如何做同样的事情 我从中学到了很多here 但即使有了答案 有些事情仍然不清楚 请抱歉 如果我没有从git 参考 问题 是否有最佳实践 哪些参数应该显示在哪个配置文件中
  • 令牌身份验证与 Cookie

    令牌身份验证和使用 cookie 进行身份验证有什么区别 我正在努力实施Ember Auth Rails 演示但我不明白使用令牌身份验证背后的原因 如Ember 验证常见问题解答关于 为什么令牌身份验证 的问题 HTTP 是无状态的 为了授