一、背景
1、A应用登录自家系统访问使用账号密码登录换取token来获取资源
2、如果A应用要访问B应用的资源怎么办?
不可能将B系统的账号密码告诉A应用,不安全,可以通过auth2.0 B授权给A授权码(临时账号密码)换取token访问资源(部分)
二、使用场景
最常见的三方登录,以及大部分接入三方系统应用的场景如三方支付等
三、原理-授权码形式
1、获取授权码(临时密钥),详见下图1-5步骤
2、使用授权码换取token,详见下面6到10步
3、拿到token后触请求其他资源,触发下一步业务,11-12步骤,下一步业务基于场景来,如登录、支付或者绑定等场景

阶段一:前端用户感知层面
-
用户发起登录请求:
-
动作:用户在CSDN App内点击“微信登录”按钮。
-
背后逻辑:CSDN App接收到指令后,准备重定向跳转到微信的授权页面。
-
-
重定向至微信授权:
-
动作:CSDN App将用户界面跳转到一个由微信提供的特定授权页面。
-
背后逻辑:手机界面会从CSDN App切换到微信(或内嵌的微信授权WebView),地址栏变为微信的域名。
-
-
用户确认授权:
-
动作:用户在微信提供的页面上,看到明确提示“CSDN申请获取您的昵称、头像”。用户点击 “同意” 按钮。
-
背后逻辑:这是OAuth 2.0的核心——用户主动授权CSDN获取其在微信上的部分非敏感信息,而非直接提供微信账号密码。(明确访问哪些资源)
-
-
微信生成授权码:
-
动作:微信授权服务在获得用户同意后,生成一个一次性的、短时效的“授权码(auth code)”。
-
-
携带授权码返回:
-
动作:微信将用户界面重定向回CSDN App,并在跳转的链接中附带上一步生成的授权码。
-
用户感知:手机界面从微信跳转回CSDN App。
-
阶段二:后端通信流程(用户无感)
此阶段是服务端之间的通信,对用户完全透明,是安全的关键。
-
转发授权码:
-
动作:CSDN App(前端)将接收到的授权码(Code)发送给CSDN自己的服务端。
-
-
换取访问令牌:
-
动作:CSDN服务端携带收到的授权码(Code) 和自身的应用密钥(AppSecret),一起发送给微信授权服务,请求换取 “访问令牌(Access Token)”。
-
安全关键:应用密钥绝不允许在前端暴露,因此必须由服务端完成此步骤,确保安全。
-
-
微信验证并返回令牌:
-
动作:微信授权服务验证授权码和应用密钥的有效性。通过后,向CSDN服务端返回一个访问令牌(Access Token)。
-
-
使用令牌获取用户信息:
-
动作:CSDN服务端拿着获取到的Access Token,调用微信的开放接口(即“受保护资源”),请求获取用户的昵称、头像等预先申请的信息。
-
-
微信返回用户资源:
-
动作:微信验证Access Token有效后,将用户的JSON格式信息(如OpenID、昵称、头像URL)返回给CSDN服务端。
-
阶段三:登录完成(业务触发)
此阶段是CSDN处理用户信息并完成本地登录。
-
处理用户信息并完成登录:
-
动作:CSDN服务端收到微信返回的用户信息后,会进行以下操作:
-
以微信用户的唯一标识(如OpenID)为依据,在CSDN的数据库中查找是否已存在绑定该微信的账号。
-
如果存在,则直接为该账号建立登录会话(Session);如果不存在,则创建一个新的CSDN账号并与该微信账号绑定。
-
完成上述操作后,通知CSDN App前端登录已成功。
-
-
-
前端更新界面:
-
动作:CSDN App前端收到登录成功的通知后,更新界面状态(如显示用户昵称、头像),并跳转至首页或用户之前访问的页面。
-
最终结果:用户成功登录CSDN。
-
四、应用场景举例
如果厂商接入阿里物联网账号系统也是用的auth2.0方式,但是阿里是作为三方,自家系统授权给阿里前端iot SDK authcode->传递给阿里物联网平台(智能生活服务)->App认证返回ac_token->阿里物联网平台通过ac_token访问app用户服务拿取用户信息




&spm=1001.2101.3001.5002&articleId=155351427&d=1&t=3&u=f9d9605d75234ebc92bc97bd8815f3af)
2448

被折叠的 条评论
为什么被折叠?



