微信扫码认证
一、认识
微信扫码登录认证 是现代 Web
应用中广泛使用的一种身份验证方式,特别是在移动端和跨平台场景下。它结合了微信作为一个 庞大的身份提供者(IdP
) 和扫码技术的便捷性,实现了快速的用户身份认证。微信扫码登录认证 的实现原理涉及多个复杂的环节,包括 OAuth 2.0
协议、二维码生成、扫码确认和实时回调等机制。
微信扫码登录 的通知机制是基于 HTTP
重定向来实现的。在用户扫码并同意授权后,微信通过重定向将授权码(code
)传递给 Web
应用。Web
应用再通过 code
获取 access_token
,从而完成身份认证。这一过程不涉及 WebSocket
或其他实时通信机制,而是通过标准的 HTTP
协议和 OAuth 2.0
的授权码流程来完成认证和授权。
二、工作流
1. 用户发起登录请求: 用户在 Web
应用(或其他客户端)点击 微信登录 按钮,触发登录流程。Web
应用会调用微信的开放平台提供的 OAuth
认证接口, Web
应用会生成一个请求 URL
,该 URL
指向微信的授权端点,并包含一些必要的参数, 比如: client_id
(Web
应用的唯一标识)、redirect_uri
(用户授权后重定向的地址)、scope
(请求的权限范围,如 snsapi_userinfo
,用于获取用户信息), response_type
(通常为 code
,表示请求授权码)。 OAuth
认证请求 URL
如下所示:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=your_app_id&redirect_uri=https://yourapp.com/callback&response_type=code&scope=snsapi_userinfo&state=1234#wechat_redirect
2. 生成二维码: Web
应用请求微信服务器生成一个二维码,二维码包含一个认证 url
,此 URL
中包含了一个唯一的 auth_code
。用户通过扫码的方式,将这个 auth_code
发送到微信客户端,微信客户端会验证用户身份(通常是已登录的用户)并确认是否授权。
3. 用户扫码并确认授权: 用户通过微信打开二维码,扫码后会看到一个确认页面,提示是否授权登录 Web
应用。如果用户授权,微信会生成一个授权码(通常是 code
),微信服务器会将用户授权的 code
发送回 Web
应用。在 OAuth 2.0
授权码模式下,微信会通过 HTTP
重定向的方式将 code
附加到 redirect_uri
的查询参数中(例如:redirect_uri?code=authorization_code
)。用户扫码并授权后,微信会将用户重定向到 https://yourapp.com/callback
,URL
如下:
https://yourapp.com/callback?code=authorization_code&state=1234
4. Web
应用通过 code
获取 access_token
: Web
应用通过重定向的 URL
获得 code
(授权码)。之后,Web
应用会使用这个 code
向微信的 Token Endpoint
发送 POST
请求,交换 access_token
和 openid
等用户信息。请求中会包含以下参数: client_id
(Web
应用的唯一标识)、client_secret
(Web
应用的密钥,用于身份验证)、code
(用户从微信获取的授权码)、redirect_uri
(与授权请求时的 URI
一致)。微信的 Token Endpoint
会验证请求的合法性,返回 access_token
、openid
、refresh_token
等数据。Web
应用在 https://yourapp.com/callback
页面获取到 code
,然后用 code
发起 POST
请求向微信的 Token Endpoint
请求 access_token
,请求 URL
如下:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=your_app_id&secret=your_app_secret&code=authorization_code&grant_type=authorization_code
5. 用户信息存储与会话创建: Web
应用将用户的 access_token
和 openid
作为标识存储在本地(如通过 cookie
、session
或 localStorage
),并且为用户创建一个本地会话。同时,Web
应用可以利用微信返回的用户信息(如昵称、头像等)来个性化展示。微信返回如下响应,Web
应用通过 access_token
获取用户信息:
{
"access_token": "ACCESS_TOKEN",
"expires_in": 7200,
"refresh_token": "REFRESH_TOKEN",
"openid": "USER_OPENID",
"scope": "snsapi_userinfo"
}
6. 授权登录成功后回调: 一旦认证过程完成,Web
应用会将用户重定向到指定的回调页面。此页面会展示登录成功的信息或者用户首页。 一般认证完成后, 需要跳转到完善信息的页面,填写手机号和其他信息。