微信扫码登录基于OAuth2.0协议,通过授权码模式实现第三方应用的用户身份验证。以下是完整流程的详细步骤:
1. 准备工作
注册应用:在微信开放平台注册应用,获取AppID和AppSecret。
配置回调域名:设置授权后的回调地址(redirect_uri),需通过微信审核。
2. 生成登录二维码
前端请求:用户进入登录页时,第三方应用前端请求生成二维码。
构造二维码内容:
https://open.weixin.qq.com/connect/qrconnect?
appid=APPID&
redirect_uri=ENCODED_REDIRECT_URI&
response_type=code&
scope=snsapi_login&
state=STATE#wechat_redirect 参数说明:
appid:应用唯一标识。
redirect_uri:用户授权后跳转的URL(需URL编码)。
scope:授权作用域(如snsapi_login静默授权,snsapi_userinfo需用户确认)。
state:随机字符串,防CSRF攻击。
3. 用户扫码并授权
扫码动作:用户使用微信扫描二维码,微信客户端解析内容并跳转至授权页。
用户确认:用户在微信内点击“同意登录”,授权第三方应用获取基本信息。
4. 微信返回授权码(Code)
重定向回调:微信将用户重定向到redirect_uri,并附带参数:
redirect_uri?code=AUTHORIZATION_CODE&state=STATE 验证State:第三方后端校验state参数是否匹配,防止伪造请求。
5. 换取Access Token
后端请求Token:使用code向微信服务器换取访问令牌:
POST https://api.weixin.qq.com/sns/oauth2/access_token?
appid=APPID&
secret=APPSECRET&
code=CODE&
grant_type=authorization_code 响应示例: {
"access_token": "ACCESS_TOKEN",
"expires_in": 7200,
"refresh_token": "REFRESH_TOKEN",
"openid": "OPENID",
"scope": "snsapi_login"
} 6. 获取用户信息 调用用户接口:使用access_token和openid获取用户详细信息:
GET https://api.weixin.qq.com/sns/userinfo?
access_token=ACCESS_TOKEN&
openid=OPENID&
lang=zh_CN 响应示例: {
"openid": "OPENID",
"nickname": "用户昵称",
"headimgurl": "头像URL",
"unionid": "UNIONID" // 若存在微信开放平台绑定
} 7. 第三方应用处理登录 绑定本地账号:根据openid/unionid判断用户是否已注册:
已注册:直接登录,生成会话凭证(如JWT)。
未注册:创建新账号并关联微信信息。
返回前端状态:通知前端登录成功,跳转至首页。
8. 安全与异常处理
Token刷新:通过refresh_token刷新过期的access_token。
错误码处理:如code失效、用户拒绝授权等,需友好提示用户。
HTTPS:全程使用HTTPS确保数据安全。
时序图
关键注意事项
二维码有效期:通常为5分钟,超时需重新生成。
用户取消处理:监听取消事件,更新前端状态。
UnionID机制:跨应用统一用户标识需绑定开放平台。
频率限制:微信API有调用频率限制,需合理设计重试机制。
通过以上流程,第三方应用可安全高效地实现微信扫码登录功能。