关于OAuth2授权类型

ejk8hzay  于 2022-11-21  发布在  其他
关注(0)|答案(5)|浏览(185)

我 正在 读 一篇 关于 OAuth2 , https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2 的 文章 。 让 我 困惑 的 是 授权 类型 。 它 说
授权 码 :用于 服务 器 端 应用 程序 隐 式 :与 移动 应用 程序 或 Web 应用 程序 ( 在 用户 设备 上 运行 的 应用 程序 ) 配合 使用
那么 , 服务 器 端 应用 程序 和 网络 应用 程序 之间 有 什么 区别 , 它们 不 一样 吗 ? 有人 能 给 我 一 个 例子 , 什么 时候 使用 这 两 种 授权 类型 吗 ? 谢谢 。

ngynwnxp

ngynwnxp1#

我 喜欢 把 授权 看作 一 个 东西 , 就 像 一枚 硬币 , 而 访问 令牌 是 另 一 个 东西 , 一 把 打开 门 的 钥匙 。
为了 得到 钥匙 , 你 必须 交出 一枚 硬币 。 什么 样 的 硬币 都 可以 接受 ?
您 可以 交出 一 个 写 有 密码 的 硬币 。 这 表示 您 知道 密码 , 因此 硬币 会 被 接受 , 您 会 得到 一 个 密钥 。 这 就是 资源 所有 者 密码 身份 证明 授权 。

  • Web 服务 器 可以 提供 登录 表单 , 用户 键入 Web 服务 器 可以 看到 的 密码 。 Web 服务 器 使用 该 密码 获取 密钥 。 *

除了 钥匙 , 您 可能 还 获得 了 一 个 刷新 令牌 。 因此 , 稍后 您 可以 交出 一枚 印有 刷新 令牌 的 硬币 。 此 硬币 被 接受 , 您 将 获得 一 个 新 的 钥匙 。 这 就是 刷新 令牌 授予 。
您 可能 不 知道 自己 的 密码 。 您 的 父母 会 为 您 记录 密码 。 您 要求 父母 为 您 取 一 个 " 密码 " 。 他们 与 当局 交谈 并 提供 密码 , 然后 收到 一 个 密码 , 他们 将 密码 提供 给 您 。 现在 您 可以 将 密码 写 在 硬币 上 , 将 硬币 交给 他们 , 然后 收到 一 把 钥匙 。 您 没有 看到 密码 ,你 的 父母 没有 看到 钥匙 这 是 授权 码

  • 网络 服务 器 要求 您 " 登录 Google " 。 Google 会 要求 您 输入 密码 并 向 您 提供 一 个 授权 码 , 该 授权 码 会 传回 网络 服务 器 。 网络 服务 器 可以 从 Google 获取 密钥 , 而 无需 查看 您 的 密码 。 *

您 可能 与 当局 有 特殊 关系 , 并 拥有 秘密 。 您 不 需要 密码 。 在 这种 情况 下 , 您 可以 将 此 秘密 放在 硬币 上 , 并 将 其 交换 为 密钥 。 这 是 客户 端 凭证 授权 。

  • 您 可能 是 后端 服务 器 , 需要 密钥 , 但 没有 用户 名 或 密码 。 您 只 需要 一 个 密钥 即可 获得 密钥 。 *

如果 你 是 VIP , 你 甚至 不 需要 硬币 ! 你 只 需要 挥 挥手 , 就 可以 得到 一 把 钥匙 。 这 是 一 种 " 隐性 " 硬币 - - 也 就是 说 , 没有 硬币 ! 这 就是 隐性 授权 。

  • 你 可能 是 一 个 手机 应用 程序 , 真 的 没有 安全 的 地方 让 你 保守 秘密 , 所以 你 只是 挥 挥手 拿 到 你 的 钥匙 。 *
nnvyjq4y

nnvyjq4y2#

您 可以 将 每个 OAuth 授权 类型 视为 一 个 流 。
每 种 补助 金 类型 都 很 相似 , 因为 每 种 补助 金 都 有 两 个 主要 部分 :
1.应用 程序 从 用户 处 获取 授权 密钥/访问 令牌
1.应用 程序 使用 密钥/访问 令牌 代表 用户 执行 操作 ( 例如 , 每天 中午 12 点 在 推特 上 发布 内容 )
为了 了解 所有 4 种 OAuth2 授权 类型 之间 的 差异 , 让 我们 看 一 张 并排 比较 它们 的 图片 。

授权 码 ( 右上 角 ) :

  • 共有 5 个 政党 :用户 、 应用 程序 、 防护 、 OAuth 服务 器 ( 表示 为 具有 多 个 密钥 的 密钥 串 ) 、 资源 服务 器 ( 表示 为 具有 多 个 门 的 商店 )
  • 用户 通过 提供 用户 名/密码 从 OAuth 服务 器 获得 密钥/访问 令牌 , 并 将 其 " 移交 " 给 Guard ( 后端 ) , 而 应用 程序 ( 前端 ) 只能 通过 Guard 访问 资源 服务 器 , 因为 它 无法 访问 密钥
  • Guard 通过 常规 方式 ( 例如 , 通过 浏览 器 HTTP 会话 ) 识别 应用 程序 的 用户 。

隐 式 ( 右 下 角 ) :

  • 只有 4 方 , 即 没有 守卫 ( 后端 )
  • 用户 通过 提供 用户 名/密码 从 OAuth 服务 器 获得 密钥 , 并 将 其 " 移交 " 给 应用 程序 ( 前端 ) , 因为 没有 保护
  • 应用 程序 直接 访问 资源 服务 器 , 因为 它 具有 密钥
    • 备注 : * *
  • 在 隐 式 授权 类型 中 , 密钥 位于 前端 ( 浏览 器 ) , 它 暴露 于 更多 的 攻击 向量 , 因此 与 授权 代码 授权 类型 ( 密钥 位于 后端 ) 相比 , 它 的 安全 性 较 低

有 了 这些 了解 , 你 现在 就 可以 回答 你 自己 的 问题 了 :
服务 器 端 应用 程序 和 网络 应用 程序 有 什么 不同 , 它们 不 一样 吗 ?
服务 器 端 应用 有 一 个 后端 来 协调 前端 和 数据 存储 等 , 因此 它们 可以 实现 授权 码 授权 类型 , 后端 充当 保护 , 这样 更 安全 。 对于 没有/依赖 后端 的 Web 应用 ( 单 页 应用 ) , 它们 需要 使用 隐 式 授权 类型 。

wn9m85ua

wn9m85ua3#

这 是 安全 问题 , 所以 很 复杂 。 嗯 , 不 太 复杂 。
首先 , 您 需要 确定 您 的 OAuth 客户 端 ( 即 您 的 应用 程序 ) 是 " 公开 还是 机密 "
最 好 的 规则 是 遵循 RFC 6749 第 1.3.2 节 " 隐 式 授权 可 提高 某些 客户 端 的 响应 性 和 效率( 例如 作为 浏览 器 内 应用 程序 实现 的 客户 端 ) , 因为 它 减少 了 获取 访问 令牌 所 需 的 往返 次数 。 但是 , 这种 便利 性 应 与 使用 隐 式 授权 的 安全 影响 进行 权衡 ,例如 第 10.3 节 和 第 10.16 节 中 所 述 的 那些 , * * 特别 是 当 授权 代码 授予 类型 * * 可用 时 。 "

xriantvc

xriantvc4#

授权 代码 授权 提供 了 额外 的 安全 性 , 适用 于 提供 服务 器 会话 的 应用 程序 。 额外 的 安全 性 是 通过 用户 代理 和 客户 端 的 分离 来 提供 的 。 例如 , Web 浏览 器 ( 用户 代理 ) 使用 Facebook 帐户 登录 Stackexchange ( 客户 端 ) 。 由于 客户 端 Web 应用 程序 ( 服务 器 ) 可以 安全 地 获取 访问 令牌 并 存储 它 , 因此 令牌 受到 损害 的 风险 较小 。
隐 式 代码 授权 的 安全 性 较 低 , 并且 仅 在 没有 Web 服务 器 或 服务 器 会话 ( 例如 , 本地 移动 应用 程序 、 javascript 应用 程序 ) 时 可用 。 由于 用户 代理 必须 获取 令牌 , 因此 , 具有 中间 证书 ( 例如 授权 代码 ) 并 在 以后 获取 访问 令牌 没有 意义 。
这 可能 对 https://oauth2.thephpleague.com/authorization-server/which-grant/ 有 帮助

xsuvu9jc

xsuvu9jc5#

授权 类型 是 客户 端 用于 获取 访问 令牌 的 授权 流 的 类型 。 授权 类型 确定 客户 端 用于 请求 访问 令牌 的 方法 。 授权 类型 在 对 令牌 终结 点 的 请求 中 指定 。
授权 类型 的 类型 :
1.授权 码 授予 :这 是 最 常见 的 授权 类型 。 它 用于 源 代码 不 公开 的 Web 应用 程序 、 移动 应用 程序 和 桌面 应用 程序 。
1.客户 端 凭据 授予 :当 客户 端 请求 访问 其 控制 下 的 受 保护 资源 时 , 或 请求 访问 先前 与 授权 服务 器 安排 的 另 一 个 资源 所有 者 的 资源 时 , 将 使用 此 令牌 。 客户 端 向 授权 服务 器 进行 身份 验证 , 并 请求 访问 令牌 。
1.刷新 令牌 授权 :这 用于 在 当前 访问 令牌 无效 或 过期 时 获取 新 的 访问 令牌 , 或者 获取 具有 相同 或 更 窄 范围 的 其他 访问 令牌 ( 访问 令牌 的 生存 期 可能 比 资源 所有 者 授权 的 生存 期 短 , 权限 可能 比 资源 所有 者 授权 的 权限 少 ) 。

  1. PKCE ( 用于 代码 交换 的 验证 密钥 ) :这 用于 公用 客户 端 , 其中 客户 端 无法 维护 其 认证 的 秘密 性 。 这 用于 原生 或 行动 应用 程序 , 其中 客户 端 和 服务 器 位于 不同 的 网域 。
    1.设备 代码 授予 :在 客户 端 无法 访问 资源 所有 者 的 浏览 器 ( 如 智能 电视 、 媒体 控制 台 和 打印 机 ) 的 情况 下 使用 此 选项 。 在 客户 端 无法 接收 传入 请求 ( 通过 从 授权 终结 点 重 定向 ) 的 情况 下 也 使用 此 选项 。
    1.密码 授予 ( 已 弃 用 ) :这 在 客户 端 具有 资源 所有 者 的 凭据 ( 如 用户 名 和 密码 ) 并 可以 使用 这些 凭据 直接 获取 访问 令牌 的 情况 下 使用 。
    1.隐 式 授予 ( 已 弃 用 ) :这 类似 于 授权 代码 授予 , 但 不 需要 为 访问 令牌 交换 授权 代码 。 这 用于 客户 端 和 服务 器 位于 同一 域 中 的 单 页 应用 程序 ( SPA ) 。

相关问题