OAuth 术语 已经 困扰 我 很 长 时间 了 。 OAuth 是 像 一些 人 建议 的 那样 授权 还是 认证 ?
如果 我 说 错 了 请 纠正 我 , 我 一直 认为 授权 是 允许 某人 访问 资源 的 行为 , 但是 OAuth 似乎 没有 任何 实现 真正 允许 用户 访问 给定 的 资源 。( 签名 , 有时 加密 ) 。 然后 , 每次 调用 时 都会 将 此 令牌 传递 给 后端 服务 端 点 , 在 后端 服务 端 点 检查 令牌 的 有效 性 , 这 也 不是 OAuth 所 关心 的 问题 。
我 认为 OAuth 身份 验证 ( 每篇 文章 都 说 不是 ) 需要 用户 提供 凭据 , 而 凭据 反过来 又 证明 用户 应该/不 应该 拥有 访问 权限 吗 ?
所以 看 起来 OAuth 不是 Authorization 也 不是 Authentication , 因为 这些 都 必须 由 其他 进程 来 执行 。 那么 它 到底 是 什么 呢 ? 它 是 一 个 传递 令牌 的 进程 吗 ? 它 是 一 个 没有 具体 含义 的 空洞 的 词 吗 ?
很 难 问 一 个 关于 这个 主题 的 问题 , 而 不 听 起来 神秘 和 迷信 ( 鬼 和 妖精 ) , 所以 我 认为 回答 这个 问题 也 不会 是 一 件 简单 的 事情 。
2条答案
按热度按时间jgwigjjp1#
# # OAuth 是 一 种 授权 规范
OAuth 2.0 是 授权 规范 , 但 不是 身份 验证 规范 。 RFC 6749 , 3.1 。 授权 端点 明确 规定 如下 :
授权 端点 用于 与 资源 所有 者 交互 并 获得 授权 。 授权 服务 器 必须 首先 验证 资源 所有 者 的 身份 。 授权 服务 器 对 资源 所有 者 进行 身份 验证 的 方式 ( 例如 , 用户 名 和 密码 登录 、 会话 cookie ) * * 超出 了 本 规范 的 范围 * * 。
# # OAuth 身份 验证 ?
认证 处理 的 是 " 谁 是 谁 " 的 信息 , 授权 处理 的 是 " 谁 授予 谁 什么 权限 " 的 信息 , 授权 流程 的 第 一 步 就是 认证 , 这 也 是 人们 经常 感到 困惑 的 原因 。
现在 有 很多 图书馆 和 服务 都 使用 OAuth 2.0 进行 身份 验证 , 它 通常 被 称为 " 社交 登录 " , 它 让 人 更加 困惑 , 如果 你 看到 " OAuth authentication " ( 不 是 " OAuth authorization " ) , 那 就 是 一 个 使用 OAuth 进行 身份 验证 的 解决 方案 。
# # OpenID 连接
OpenID 1.0 和 OpenID 2.0 是 旧 的 认证 规范 , 制定 规范 的 人 希望 人们 使用 OpenID 进行 认证 , 但 有人 开始 使用 OAuth 2.0 进行 认证 ( 而 不是 授权 ) , OAuth 认证 迅速 流行 。
从 OpenID 人员 的 Angular 来看 , 基于 OAuth 的 身份 验证 不够 安全 , 但 他们 不得 不 承认 人们 更 喜欢 OAuth 身份 验证 。 因此 , OpenID 人员 决定 在 OAuth 2.0 之上 定义 一 个 新 的 规范 * * OpenID Connect * * 。
是 的 , 这 让 人们 更加 困惑 。
# # OAuth 2.0 和 OpenID Connect 的 简单 定义
( 抱歉 , 这些 定义 摘自 我 公司 的 overview 页面 )
# # 从 实现 者 的 Angular 定义
# # 请 参阅
1.* * * * * *
1.* * * * * *
1.* * * * * *
1.* * * * * *
4nkexdtk2#
OAuth是一个授权协议。它不是为验证而设计的。是的,在OAuth过程中有一个步骤,身份服务器将验证资源所有者。它的发生方式不属于OAuth协议。这就是OAuth不关心验证的原因。
OAuth通过向第三方(服务提供商)提供访问令牌来执行授权,该方将能够通过提供令牌来授权对资源的访问。
假设有一个要求,服务提供者希望代表资源所有者访问资源(由身份服务器保护)。因此,资源所有者将首先进行身份验证,然后授予服务提供者访问特定资源的权限。然后,身份服务器将为服务提供者颁发一个访问令牌。随后,服务提供者可以使用该令牌访问资源。
在这里,OAuth不关心谁携带了访问令牌或试图访问资源,它验证访问令牌,并允许第三方访问资源。