基本流程
- 获取授权码
code
- 通过授权码获取访问令牌
access_token
- 通过访问令牌获取用户信息(用户不存在时用于注册新用户)
微信
微信平台的用户登录授权使用 OAuth2.0 授权码模式(authorization_code)
- 开放平台移动应用登录 developers.weixin.qq.com/doc/oplatfo…
- 开放平台网站应用登录 developers.weixin.qq.com/doc/oplatfo…
- 公众号网页授权 developers.weixin.qq.com/doc/offiacc…
获取授权码
各个流程的主要差别在于 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
公众号网页授权流程
- 通过静默授权(
scope=snsapi_base
)获取code
,然后取得access_token/union_id/open_id
- 尝试通过
union_id/open_id
获取用户,如果用户存在,重定向到目标页面 - 如果用户不存在,通过非静默授权(
scope=snsapi_userinfo
)获取code
,然后取得用户信息 - 使用用户信息注册新用户,然后重定向到目标页面
页面重定向过程
-
start => weixin.domain.com/invite?invi…
-
静默授权 => oauth.weixin.com/authorize?a…
-
code -> token -> 检查用户是否存在 => weixin.domain.com/invite?invi…
- 用户不存在,授权获取用户信息 => oauth.weixin.com/authorize?a…
- code -> token -> userinfo -> 注册新用户 => weixin.domain.com/invite?invi…
-
end => h5.domain.com/invite?invi…
网站应用JS登录
将微信登录二维码内嵌到自己页面中,用户使用微信扫码授权后通过JS将code返回给网站。
- 引入JS文件
https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js
- 获取 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平台的用户登录授权使用 OAuth2.0 授权码模式(authorization_code) QQ平台的 unionid 与 openid,机制与微信一致
- QQ移动应用 通过客户端SDK的 loginServerSide 方法取得 code,code的值保存在
access_token
字段 - QQ网站应用 通过打开授权链接回调获取
code
接口
// 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 机制
- App支付宝登录 通过客户端SDK取得
auth_code
- 生活号授权 通过授权链接回调获取
auth_code
- 支持静默授权,scope 参数传递
auth_user
或auth_base
- docs.alipay.com/fw/api/1059…
- 支持静默授权,scope 参数传递
- 网站支付宝登录 通过授权链接回调获取
auth_code
- scope 参数传递
auth_user
- docs.open.alipay.com/263/105809/
- scope 参数传递
接口
// 网站应用/生活号 获取授权码
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,机制与微信一致
- 抖音 open.douyin.com/platform/do… 所有API都以open.douyin.com开头
- 头条 open.douyin.com/platform/do… 所有API都以open.snssdk.com/开头
接口
// 网站应用获取授权码 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