企业微信H5应用的OAuth2登录流程主要用于获取用户身份信息,实现免登录功能。以下是实现步骤的详细说明。
1. 构造网页授权链接
在前端触发跳转到企业微信授权页面,构造授权链接如下:
const appId = 'YOUR_APP_ID'; // 企业微信应用ID
const redirectUri = encodeURIComponent('https://yourdomain.com/callback'); // 回调地址
const state = 'random_string'; // 防止CSRF攻击的随机字符串
const scope = 'snsapi_base'; // 授权类型,可选snsapi_base或snsapi_privateinfo
const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirectUri}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`;
window.location.href = authUrl;
用户点击后会跳转到企业微信授权页面,完成授权后返回指定的回调地址并附带code参数。
2. 后端获取Access Token
在回调地址中,后端通过code获取用户信息:
import requests
# 企业微信API参数
corp_id = "YOUR_CORP_ID"
corp_secret = "YOUR_CORP_SECRET"
code = "CODE_FROM_CALLBACK"
# 获取Access Token
token_url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corp_id}&corpsecret={corp_secret}"
token_response = requests.get(token_url).json()
access_token = token_response.get("access_token")
# 使用Access Token和Code获取用户信息
user_info_url = f"https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={access_token}&code={code}"
user_info_response = requests.get(user_info_url).json()
print(user_info_response)
返回的用户信息中包含UserId等基本信息,可用于后续业务逻辑。
3. 注意事项
可信域名配置:在企业微信管理后台设置可信域名,确保回调地址合法。
静默授权与手动授权:snsapi_base为静默授权,仅获取基本信息;snsapi_privateinfo需用户确认,可获取敏感信息。
安全性:使用随机字符串作为state防止CSRF攻击。
4. 最佳实践
在前端处理回调时,清除URL中的code和state参数,避免重复跳转。
定期刷新Access Token,避免因过期导致请求失败。
通过以上步骤,即可实现企业微信H5应用的OAuth2登录功能。