Skip to content

微信授权登陆

微信授权登录是通过 OAuth 2.0 协议实现的,允许第三方应用以安全的方式获取用户的公开信息或执行特定操作。这种机制让用户可以通过微信账号快速登录第三方应用,而无需创建新的用户名和密码,同时还可以控制应用能够访问的数据范围。

微信开放平台配置

在开始之前,你需要在微信开放平台注册并创建一个应用,获得AppIDAppSecret。这些凭据将用于与微信服务器进行通信。

  1. 创建应用:在微信开放平台上注册你的应用,并填写相关信息如应用名称、应用官网等。
  2. 获取 AppID 和 AppSecret:完成应用创建后,你可以在应用详情页面找到这两个重要的标识符。

授权流程

微信授权登录主要包括以下步骤:

1. 引导用户同意授权

首先需要引导用户进入微信的 OAuth2.0 授权页面,在那里用户可以同意或拒绝授权给你的应用。

请求地址如下:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=YOUR_APPID&redirect_uri=YOUR_REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
  • appid: 在微信开放平台申请的应用唯一标识。
  • redirect_uri: 用户同意授权后的回调地址,必须经过 URL 编码。
  • response_type: 固定为code
  • scope: 应用授权作用域,snsapi_base(不弹出授权页面,直接跳转,只能获取用户 openid)和snsapi_userinfo(弹出授权页面,可通过 openid 拿到昵称、性别、所在地等)。
  • state: 可选参数,用于保持请求和回调的状态,防止 CSRF 攻击。

2. 获取 Access Token

当用户同意授权后,微信会重定向到指定的redirect_uri,并在 URL 中附带一个授权码(code)。使用这个 code 以及你的AppIDAppSecret向微信服务器请求访问令牌(access token)。

请求方式为 GET:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=YOUR_APPID&secret=YOUR_APPSECRET&code=CODE&grant_type=authorization_code

响应示例:

json
{
  "access_token": "ACCESS_TOKEN",
  "expires_in": 7200,
  "refresh_token": "REFRESH_TOKEN",
  "openid": "OPENID",
  "scope": "SCOPE"
}

3. 使用 Access Token 获取用户信息

如果授权作用域为snsapi_userinfo,你可以使用获取到的access_tokenopenid来请求用户的详细信息。

请求方式为 GET:

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

返回数据示例:

json
{
  "openid": "OPENID",
  "nickname": "NICKNAME",
  "sex": 1,
  "province": "PROVINCE",
  "city": "CITY",
  "country": "COUNTRY",
  "headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6fic45iasX9mSj9W6uWaibg68PQXfhrzJXnGsfYVIoWic/0",
  "privilege": ["PRIVILEGE1", "PRIVILEGE2"],
  "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

注意事项

  • 确保所有请求都通过 HTTPS 传输,以保证安全性。
  • 正确处理授权失败的情况,例如用户拒绝授权。
  • 对于敏感操作或数据,考虑增加额外的安全措施,比如使用state参数防止跨站请求伪造(CSRF)攻击。
  • 定期检查并更新你的AppSecret,尤其是在怀疑泄露的情况下。

通过上述步骤,你可以成功集成微信授权登录功能,为用户提供便捷的登录体验。

[^参考Demo] : wechat-scan-demo

Released under the MIT License.