OAuth2.0授权码登录详解

一、概述

我们平时登录各种网站时都会用到第三方账号登录,比如qq账号授权登录、GitHub账号授权登录等等,那么究竟是怎么实现的第三方账号登录的呢,其实就是通过OAuth2.0的机制

接下来的叙述都以微信登录同程旅行为例,先看下授权登录用户操作流程

1.用户先点击微信登录

OAuth2.0授权码登录详解_第1张图片

2.弹出授权框点击同意后登录成功

OAuth2.0授权码登录详解_第2张图片

二、OAuth2.0 重要的参数

(1)code码:

用户点击微信登录时,同程的客户端会调用微信提供的授权组件弹出授权框,当用户点击授权,那么微信组件将会申请一个code码给到同程客户端,该code码为一次性,使用过后将会失败

(2)accessToken

同程客户端通过code获取的具有时效性的accessToken,一般为两小时有效,调用微信其他api必须携带该token

(3)client_id在应用申请时微信开放平台给同程分配的唯一client_id

(4)client_secret应用申请时微信开放平台给同程分配的唯一秘钥,所有请求必须携带,以此来保证token不被恶意攻击

(5)refresh_token(目前很多公司都废弃掉了,无需刷新每次都获取新的)

顾名思义用于刷新token,当token过期可以用这个直接获取新的而不用完整的走一遍授权流程

三、授权码授权登录流程

1.用户点击微信账号登录

2.同程客户端调用微信提供的授权组件弹出用户授权框,询问用户是否授权

3.用户点击同意授权后生成的code

4.同程客户端请求同程服务端并携带code

5.同程服务端调用微信获取accessToken的api并携带code、client_id、client_secret

6.微信服务端校验通过后,返回accessToken、refresh_token给同程服务端

7.同程服务端使用token调用微信其他api获取到所需的用户信息完成登录

四、OAuth2.0登录的四种方式

刚刚我们已经提到了授权码授权登录,这种方式是最常用的登录方式因为安全性比较高,不过OAuth2.0其实还有其他三种

1.授权码

上面已详细讲过

2.隐藏式

上边提到有一些Web应用是没有后端的, 属于纯前端应用,无法用上边的授权码模式。令牌的申请与存储都需要在前端完成,跳过了授权码这一步。

前端应用直接获取 tokenresponse_type 设置为 token,要求直接返回令牌,跳过授权码,微信授权通过后重定向到指定 redirect_uri

3.密码式

密码模式比较好理解,用户在同程直接输入自己的WX用户名和密码,同程拿着用户信息直接去微信申请令牌token,请求响应的 JSON结果中返回 tokengrant_type 为 password 表示密码式授权。

4.凭证式

凭证式和密码式很相似,主要适用于那些没有前端的命令行应用,可以用最简单的方式获取令牌,服务端直接通过client_id、client_secret请求第三方服务端,第三方服务端在请求响应的 JSON 结果中返回 token

你可能感兴趣的:(其他)