OAuth2.0 授权码登录

OAuth2.0 授权码登录将微信登录二维码内嵌到自己页面中,用户使用微信扫码授权后通过JS将code返回给网站。

基本流程

  1. 获取授权码code
  2. 通过授权码获取访问令牌access_token
  3. 通过访问令牌获取用户信息(用户不存在时用于注册新用户)

微信

微信平台的用户登录授权使用 OAuth2.0 授权码模式(authorization_code)

获取授权码

各个流程的主要差别在于 code 的获取方式不同

  • 移动应用登录,通过客户端SDK取得 code
  • 网站应用登录,通过授权链接回调获取 code (open.weixin.qq.com/connect/qrc…)
  • 网站应用JS登录,将微信登录二维码内嵌到自己页面中,用户使用微信扫码授权后通过JS将code返回给网站
  • 公众号网页授权,通过授权链接回调获取 code (open.weixin.qq.com/connect/oau…)

接口

// 网站应用获取授权码 https://open.weixin.qq.com/connect/qrconnect?appid=[x]&redirect_uri=[x]&scope=[x]&state=[x]&response_type=code#wechat_redirect // 公众号网页获取授权码 - 此接口仅能在微信客户端调用 https://open.weixin.qq.com/connect/oauth2/authorize?appid=[x]&redirect_uri=[x]&scope=[x]&state=[x]&response_type=code#wechat_redirect

// 获取访问令牌 https://api.weixin.qq.com/sns/oauth2/access_token?appid=[x]&secret=[x]&code=[x]&grant_type=authorization_code

// 获取用户信息 https://api.weixin.qq.com/sns/userinfo?access_token=[x]&openid=[x]&lang=zh_CN 

公众号网页授权流程

  1. 通过静默授权(scope=snsapi_base)获取code,然后取得 access_token/union_id/open_id
  2. 尝试通过 union_id/open_id 获取用户,如果用户存在,重定向到目标页面
  3. 如果用户不存在,通过非静默授权(scope=snsapi_userinfo)获取code,然后取得用户信息
  4. 使用用户信息注册新用户,然后重定向到目标页面

页面重定向过程

网站应用JS登录

将微信登录二维码内嵌到自己页面中,用户使用微信扫码授权后通过JS将code返回给网站。

  1. 引入JS文件 https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js
  2. 获取 code
var obj = new WxLogin({
  self_redirect:true,
  id:"login_container", 
  appid: "", 
  scope: "", 
  redirect_uri: "",
  state: "",
  style: "",
  href: ""
});

scope 取值

  • scope=snsapi_base,静默授权,不取获取用户信息,用户感知的就是直接进入了回调页(业务页面)
  • scope=snsapi_userinfo,需要用户手动同意,可以获得用户信息
  • scope=snsapi_login 用于网站应用登录

授权access_token和普通access_token

  • 授权access_token 通过OAuth2.0授权码模式(grant_type=authorization_code)获取的,是应用代理用户访问接口的凭证,后续可用于获取用户基本信息
  • 普通access_token 通过OAuth2.0客户端凭证模式(grant_type=client_credential)获取的,用于应用直接访问接口

获取 access_token developers.weixin.qq.com/doc/offiacc…

unionid 与 openid

应用未关联开放平台时,只有 openid,关联开放平台后才有 unionid

  • unionid 用户在同一开放平台账号的 unionid 是唯一的
  • openid 用户在不同应用中的 openid 是不同的

QQ

QQ平台的用户登录授权使用 OAuth2.0 授权码模式(authorization_code) QQ平台的 unionid 与 openid,机制与微信一致

接口

// QQ网站应用获取授权码 
https://graph.qq.com/oauth2.0/authorize?client_id=[x]&redirect_uri=[x]&scope=[x]&response_type=code

// 获取访问令牌
https://graph.qq.com/oauth2.0/token?client_id=[x]&client_secret=[x]&code=[x]&redirect_uri=[x]&grant_type=authorization_code&fmt=json

// 获取openid/unionid
https://graph.qq.com/oauth2.0/me?access_token=[x]&fmt=json

// 获取用户信息
https://graph.qq.com/user/get_user_info?access_token=[x]&oauth_consumer_key=[x]&openid=[x]&fmt=json

对于 scope,传 get_user_info 就行了,没有静默授权

支付宝

支付宝各平台的用户登录授权使用 OAuth2.0 授权码模式(authorization_code) 支付宝返回全局支付宝用户id(user_id),未使用 unionid/openid 机制

接口

// 网站应用/生活号 获取授权码 
https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=[x]&scope=[x]&redirect_uri=[x]&state=init 

// 获取访问令牌
`alipay.system.oauth.token` 

// 获取用户信息
`alipay.user.info.share`

scope 取值

  • scope=auth_base,静默授权,不取获取用户信息,用户感知的就是直接进入了回调页(业务页面)
  • scope=auth_user,需要用户手动同意,可以获得用户信息

抖音/头条

抖音/头条平台的用户登录授权也是使用 OAuth2.0 授权码模式(authorization_code) 抖音/头条平台 unionid 与 openid,机制与微信一致

接口

// 网站应用获取授权码 https://open.douyin.com/platform/oauth/connect/ // 静默授权获取授权码 - 必须在抖音端内可以打开的h5页面调用才有效 https://aweme.snssdk.com/oauth/authorize/v2/

// 获取访问令牌
https://open.douyin.com/oauth/access_token // 获取用户信息 https://open.douyin.com/platform/oauth/userinfo

scope 取值

  • scope=login_id,静默授权,不获取用户信息,请求的接口是
  • scope=user_info,需要用户手动同意,可以获得用户信息

今天的文章OAuth2.0 授权码登录分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/16001.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注