OAuth2.0授权机制详解(一)

一、背景

1、A应用登录自家系统访问使用账号密码登录换取token来获取资源

2、如果A应用要访问B应用的资源怎么办?

不可能将B系统的账号密码告诉A应用,不安全,可以通过auth2.0 B授权给A授权码(临时账号密码)换取token访问资源(部分)

二、使用场景

最常见的三方登录,以及大部分接入三方系统应用的场景如三方支付等

三、原理-授权码形式

1、获取授权码(临时密钥),详见下图1-5步骤

2、使用授权码换取token,详见下面6到10步

3、拿到token后触请求其他资源,触发下一步业务,11-12步骤,下一步业务基于场景来,如登录、支付或者绑定等场景

阶段一:前端用户感知层面

  1. 用户发起登录请求

    • 动作:用户在CSDN App内点击“微信登录”按钮。

    • 背后逻辑:CSDN App接收到指令后,准备重定向跳转到微信的授权页面。

  2. 重定向至微信授权

    • 动作:CSDN App将用户界面跳转到一个由微信提供的特定授权页面。

    • 背后逻辑:手机界面会从CSDN App切换到微信(或内嵌的微信授权WebView),地址栏变为微信的域名。

  3. 用户确认授权

    • 动作:用户在微信提供的页面上,看到明确提示“CSDN申请获取您的昵称、头像”。用户点击 “同意”​ 按钮。

    • 背后逻辑:这是OAuth 2.0的核心——用户主动授权CSDN获取其在微信上的部分非敏感信息,而非直接提供微信账号密码。(明确访问哪些资源)

  4. 微信生成授权码

    • 动作:微信授权服务在获得用户同意后,生成一个一次性的、短时效的“授权码(auth code)”。

  5. 携带授权码返回

    • 动作:微信将用户界面重定向回CSDN App,并在跳转的链接中附带上一步生成的授权码。

    • 用户感知:手机界面从微信跳转回CSDN App。

阶段二:后端通信流程(用户无感)

 此阶段是服务端之间的通信,对用户完全透明,是安全的关键。

  1. 转发授权码

    • 动作:CSDN App(前端)将接收到的授权码(Code)发送给CSDN自己的服务端

  2. 换取访问令牌

    • 动作:CSDN服务端携带收到的授权码(Code)​ 和自身的应用密钥(AppSecret),一起发送给微信授权服务,请求换取 “访问令牌(Access Token)”。

    • 安全关键:应用密钥绝不允许在前端暴露,因此必须由服务端完成此步骤,确保安全。

  3. 微信验证并返回令牌

    • 动作:微信授权服务验证授权码和应用密钥的有效性。通过后,向CSDN服务端返回一个访问令牌(Access Token)

  4. 使用令牌获取用户信息

    • 动作:CSDN服务端拿着获取到的Access Token,调用微信的开放接口(即“受保护资源”),请求获取用户的昵称、头像等预先申请的信息。

  5. 微信返回用户资源

    • 动作:微信验证Access Token有效后,将用户的JSON格式信息(如OpenID、昵称、头像URL)返回给CSDN服务端。

阶段三:登录完成(业务触发)

此阶段是CSDN处理用户信息并完成本地登录。

  1. 处理用户信息并完成登录

    • 动作:CSDN服务端收到微信返回的用户信息后,会进行以下操作:

      • 以微信用户的唯一标识(如OpenID)为依据,在CSDN的数据库中查找是否已存在绑定该微信的账号。

      • 如果存在,则直接为该账号建立登录会话(Session);如果不存在,则创建一个新的CSDN账号并与该微信账号绑定。

      • 完成上述操作后,通知CSDN App前端登录已成功。

  2. 前端更新界面

    • 动作:CSDN App前端收到登录成功的通知后,更新界面状态(如显示用户昵称、头像),并跳转至首页或用户之前访问的页面。

    • 最终结果:用户成功登录CSDN。

四、应用场景举例

如果厂商接入阿里物联网账号系统也是用的auth2.0方式,但是阿里是作为三方,自家系统授权给阿里前端iot SDK authcode->传递给阿里物联网平台(智能生活服务)->App认证返回ac_token->阿里物联网平台通过ac_token访问app用户服务拿取用户信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值