打开/关闭搜索
搜索
打开/关闭菜单
477
547
59
2786
寻星
导航
首页
最近更改
随机页面
特殊页面
上传文件
快速入门
新手入门
编辑方针
MediaWiki帮助
隐私政策
版权信息
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
讨论
贡献
创建账号
登录
编辑“︁
OAuth 2.1
”︁(章节)
✨寻星知识库——携手与您,寻觅群星。
分享此页面
查看
阅读
编辑
编辑源代码
查看历史
associated-pages
页面
讨论
更多操作
温馨提醒:
您没有登录账户。如果您做出任意编辑,寻星会记录您的IP地址,并且此IP地址将会公开可见以便管理和供其他用户参考。如果您不希望公开匿名用户IP地址,请您
登录
或
创建
一个账户,这样寻星就会在贡献记录中公开您的用户名而不是IP地址。使用账户同样也可以让您在寻星获取更多权限,有助于您进行深入贡献。
反垃圾检查。
不要
加入这个!
=== 举例讲解 === 我们用一个大家熟悉的场景—— '''“游乐园”''' 来形象地理解 OAuth 2.0/2.1 中授权服务器 (AS)、身份提供者 (IdP)、客户端 (Client) 和资源服务器 (Resource Server) 的关系和协作: '''场景设定:''' # '''你 (用户/资源拥有者):''' 想去一个大型游乐园(比如叫“欢乐世界”)玩。 # '''第三方 App (客户端):''' 一个叫“畅游助手”的手机App。它承诺可以帮你预订“欢乐世界”里的热门项目(比如过山车、摩天轮)、查看实时排队时间、甚至购买快速通行证。但它本身不是“欢乐世界”官方的东西。 # '''欢乐世界售票处 & 身份管理处 (授权服务器 AS + 身份提供者 IdP):''' #* '''售票处窗口 (授权服务器 AS 的主要功能):''' #** 负责'''售票(发放令牌)''':发放允许你玩项目的“游玩门票”('''访问令牌 Access Token''')和“续票凭证”('''刷新令牌 Refresh Token''')。 #** '''检查App资质(客户端认证)''':确认“畅游助手”这个App是经过他们审核、允许接入的合法合作伙伴(有合法的Client ID和Secret)。 #** '''征得你的同意(用户授权)''':当你第一次通过App连接时,会弹出一个窗口问你:“’畅游助手’App想获取你的基本资料(姓名、头像)并帮你预订项目,你同意吗?” 这个窗口'''本质上是售票处在征询你的意见'''。 #* '''入园闸机 & 身份信息库 (身份提供者 IdP 的主要功能):''' #** '''验票入园(用户认证)''':你入园时,闸机(或工作人员)要'''验证你是你'''!这通常是通过扫描你的官方电子门票、年卡或者刷脸/指纹(对应用户名密码/MFA)来完成。这一步确认了“'''你是谁'''”。 #** '''管理你的身份档案(身份信息管理)''':“欢乐世界”内部有一个数据库,记录着所有注册会员的真实身份信息(姓名、照片、会员号、购买记录等)。这就是你的'''核心身份档案'''。 #* ''重要提示:'' 在“欢乐世界”这个例子里,“售票处”和“入园闸机/身份信息库”虽然物理位置可能不同,但都属于“欢乐世界”官方运营体系,紧密集成。这对应现实中AS和IdP通常是同一个服务或深度集成。 # '''欢乐世界里的游乐项目 (资源服务器 Resource Server):''' 比如过山车“极速飞龙”、摩天轮“星空之眼”。它们只认“欢乐世界”官方发放的、有效的“游玩门票”(访问令牌)。它们不关心你是通过什么App买的票,只关心票是不是真的、有没有权限玩本项目(比如你的票是否包含该项目或者有快速通行证)。 '''整个流程(对应授权码流程):''' # '''你想用“畅游助手”App订“极速飞龙” (用户发起请求):''' 你打开“畅游助手”App,点击“预订极速飞龙”。 # '''App把你带到“欢乐世界”售票处 (重定向到授权端点):''' App弹出一个窗口(或者跳转到浏览器),把你带到“欢乐世界”'''官方售票处'''的特定窗口(AS的<code>/authorize</code>端点)。App告诉售票员:“这是我的证件(Client ID),我想帮这位游客(指你)订‘极速飞龙’,订成功后请把凭证发回给我的办公室(redirect_uri)。” # '''售票处检查App并让你验明正身 (AS处理请求,触发IdP认证):''' #* 售票员先检查“畅游助手”的证件(Client ID)是否有效、登记在册(客户端认证)。 #* '''然后售票员对你说:“要帮你订票,我需要先确认你是我们‘欢乐世界’的合法游客。请去那边的闸机刷一下你的年卡/门票验明身份!” (AS要求用户认证)''' # '''你到闸机验票/刷脸 (用户认证 - IdP工作):''' 你走到入园闸机(IdP),刷了你的年卡或者进行了人脸识别。闸机系统(IdP)验证通过,确认了'''“你是你” (用户认证成功)''',并将这个成功信息(“用户123456已验证通过”)'''通知回售票处 (AS)'''。 # '''售票处征询你的同意 (用户授权 - AS工作):''' 你回到售票窗口。售票员(AS)现在知道你是谁了,然后问你:“‘畅游助手’App想帮你预订‘极速飞龙’,并且需要知道你的名字和头像来显示预订信息。你同意吗?” '''(用户授权界面)'''。你点击“同意”。 # '''售票处给App一张“兑换券” (颁发授权码):''' 售票员(AS)没有直接给你票,而是写了一张'''“兑换券”(授权码 Authorization Code)''',并告诉App:“拿着这张兑换券,带上你的正式证件(Client Secret),去我们后台的‘令牌办公室’(<code>/token</code> 端点)换真正的票吧。” 同时把你(用户的浏览器)送回了“畅游助手”App。 # '''App后台兑换“真门票” (交换令牌 - 客户端到令牌端点):''' “畅游助手”App的后台服务器,拿着“兑换券”(授权码)和自己的正式证件(Client ID + Client Secret),悄悄跑到“欢乐世界”后台的“令牌办公室”(AS的 <code>/token</code> 端点)。 # '''令牌办公室核发“游玩门票”和“身份卡” (颁发令牌 - AS工作):''' #* 令牌办公室(AS)工作人员: #** 仔细检查“兑换券”(授权码)真假。 #** 核对“畅游助手”的证件(Client ID/Secret)并确认无误。 #** '''向身份管理处(IdP)查询:''' “用户123456同意给‘畅游助手’哪些权限?他的公开信息(比如名字、头像)可以给吗?” '''(AS 基于IdP的身份信息生成ID Token和UserInfo)''' #* 确认无误后,工作人员制作并发放: #** '''“游玩门票” (访问令牌 Access Token):''' 这张票上印着“允许用户123456通过‘畅游助手’App预订和乘坐‘极速飞龙’一次”(包含权限范围 <code>scope</code>)。 #** ''可选'' '''“续票凭证” (刷新令牌 Refresh Token):''' 如果“游玩门票”过期了(比如当天有效),App可以凭这个凭证再来换新票,不用你再跑一趟售票处重新认证授权。 #** '''“身份卡” (ID Token - 来自IdP):''' 一张小卡片,上面写着官方认证的信息:“持票人:用户123456(你的唯一标识),由欢乐世界于X时X分签发”。这'''证明了你成功认证过身份'''。 #* 把这些票和卡都给了“畅游助手”App的后台。 # '''App用“游玩门票”帮你订项目 (访问资源):''' “畅游助手”App拿到“游玩门票”(Access Token),带着它去“极速飞龙”项目的后台系统(资源服务器RS),说:“这是用户123456的票,帮他预订下午3点场次。” App在请求中出示这张“门票”。 # '''“极速飞龙”项目组验票 (资源服务器验证令牌):''' “极速飞龙”项目组(资源服务器)的工作人员: #* 拿出一个“欢乐世界”官方发的验票机(对应RS配置的令牌验证密钥或自省端点)。 #* 扫描“游玩门票”(验证Access Token的签名、有效期)。 #* 查看票面信息:确实是官方发的真票!有效期没过!并且票上明确写着允许预订“极速飞龙”(检查<code>scope</code>)。 #* 于是,项目组确认预订成功,并把信息返回给App。App再告诉你预订成功! # ''后续可能:'' #* 如果“游玩门票”过期了(比如一天有效),App可以用“续票凭证”(Refresh Token)再去“令牌办公室”(<code>/token</code>端点)换一张新的“游玩门票”(新的Access Token),'''无需你再次去闸机验票和售票处同意'''。 #* 如果App想显示你的名字和头像,它可以用“游玩门票”(Access Token)去“欢乐世界”的“游客信息服务中心”(<code>/userinfo</code>端点,由IdP提供或AS代理)查询,服务中心确认票有效后,返回你的公开信息(姓名、头像)。 '''功能切分总结 (回到关键点):''' * '''身份提供者 (IdP) - “入园闸机 & 身份信息库”:''' ** '''核心工作:''' '''证明“你是谁” (用户认证)''' 和 '''管理你的核心身份档案'''。 ** 在流程中:负责第4步的“验票入园/刷脸”。 ** 提供生成<code>ID Token</code>所需的身份断言。 ** 提供<code>/userinfo</code>端点查询用户信息。 * '''授权服务器 (AS) - “售票处 & 令牌办公室”:''' ** '''核心工作:''' '''管理“谁(客户端)能代表你做什么”(授权)''' 和 '''发放“通行证”(令牌)'''。 ** 在流程中:负责检查App资质(第3步)、征得你的同意(第5步)、发放“兑换券”(第6步)、验证“兑换券”和App凭证(第8步)、制作并发放“游玩门票”(Access Token)、“续票凭证”(Refresh Token)、“身份卡”(ID Token) (第8步)。 ** 定义令牌规则,提供验证令牌的方法(如JWKS端点)。 * '''协作关键点:''' ** AS '''依赖''' IdP 来确认用户身份(第4步)。 ** AS 在征得用户同意(第5步)和确认客户端合法后,'''综合IdP的身份断言和用户的授权决策''',颁发代表'''授权'''的Access Token 和 代表'''认证'''的ID Token。 ** 资源服务器(游乐项目)只认AS发的票(Access Token),'''不直接和IdP打交道'''。 '''一句话比喻:'''<blockquote>'''IdP (闸机/档案库) 是确认“你是你”的保安。AS (售票处/令牌办) 是根据保安确认结果和你本人的同意,给第三方App开“游玩许可”的票务中心。游乐项目只认票务中心开的真票。'''</blockquote>
摘要:
温馨提示:
您在寻星上发布的所有贡献内容,
默认在知识共享署名-相同方式共享 3.0 中国大陆(CC BY-SA 3.0 CN)许可协议下发布
,如果您希望采用其他许可协议或许可约定,请务必在页面中指出。请参阅在
寻星:著作权
列出的相关内容。
未经许可,请勿提交受版权保护的作品!
发布侵权内容可能会让您失去在寻星的贡献权限。
取消
编辑帮助
(在新窗口中打开)
寻星知识库使用 Cookie 技术提升您的浏览体验,这需要在您的浏览器存储部分信息。禁用 Cookie 将导致部分功能无法正常使用。 寻星团队将严格遵守隐私政策,并尽可能保护您的信息安全。 继续浏览寻星知识库,视为您同意启用 Cookie 并生成、存储相关数据。
好的
编辑“︁
OAuth 2.1
”︁(章节)
✨寻星知识库——携手与您,寻觅群星。