如何用JMeter实现Web应用中Microsoft账号的OpenID Connect登录?
方案:JMeter自动化Microsoft OpenID Connect登录流程
核心思路
Microsoft的OpenID Connect登录基于OAuth2授权码流,直接模拟前端账号密码输入易触发验证码、多因素认证(MFA)或反爬机制,更可靠的方式是绕过前端登录页,直接调用OpenID Connect后端API获取认证令牌,再用令牌访问目标应用。
具体步骤
1. 准备Azure AD应用注册信息
先在Azure AD中注册测试应用,获取以下关键信息:
- Client ID(应用ID)
- Client Secret(客户端密钥)
- Tenant ID(租户ID,个人账户可填
common) - 授权端点:
https://login.microsoftonline.com/{Tenant ID}/oauth2/v2.0/authorize - 令牌端点:
https://login.microsoftonline.com/{Tenant ID}/oauth2/v2.0/token
2. 获取授权码(Authorization Code)
构造授权请求模拟用户授权:
- 在JMeter中添加HTTP请求,方法选
GET,URL填授权端点,携带以下参数:client_id: 你的Client IDresponse_type:coderedirect_uri: 目标应用的回调地址(需与Azure AD注册的一致)scope:openid offline_access {目标应用API权限}(示例:https://graph.microsoft.com/User.Read)state: 随机字符串(用JMeter函数${__RandomString(16,abcdefghijklmnopqrstuvwxyz1234567890,)}生成即可)
若为个人账户登录,此请求可能跳转至登录页,此时可使用JMeter的HTTP(S) Test Script Recorder录制一次手动登录流程,捕获包含授权码的回调请求,提取授权码。
3. 交换访问令牌(Access Token)
添加另一个HTTP请求,方法选POST,URL填令牌端点,使用application/x-www-form-urlencoded格式传递参数:
client_id: 你的Client IDclient_secret: 你的Client Secretgrant_type:authorization_codecode: 上一步提取的授权码redirect_uri: 与授权请求一致的回调地址
用正则表达式提取器或JSON提取器从响应中提取access_token和id_token。
4. 用令牌访问目标应用
在后续访问应用的HTTP请求中,添加HTTP Header管理器,设置Authorization头为Bearer ${access_token},即可携带认证信息访问受保护资源。
5. 多用户与MFA处理
- 模拟多用户:用CSV Data Set Config加载测试账号的邮箱、密码,录制时替换变量。
- 绕过MFA:使用关闭MFA的Azure AD测试账号;或使用密码凭据流(仅适用于内部应用,不推荐生产环境),令牌请求参数需调整为:
grant_type:passwordusername: 测试用户邮箱password: 测试用户密码scope: 所需权限范围
避坑提示
- 直接模拟登录页表单提交易触发验证码,优先使用API令牌流。
- 确保Azure AD应用已配置正确的重定向URI和API权限。
- 录制流程前清除浏览器缓存,避免会话干扰。
内容的提问来源于stack exchange,提问作者Sumit Bhave
相关产品推荐
相关产品推荐

