You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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 ID
    • response_type: code
    • redirect_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 ID
  • client_secret: 你的Client Secret
  • grant_type: authorization_code
  • code: 上一步提取的授权码
  • 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: password
    • username: 测试用户邮箱
    • password: 测试用户密码
    • scope: 所需权限范围

避坑提示

  • 直接模拟登录页表单提交易触发验证码,优先使用API令牌流。
  • 确保Azure AD应用已配置正确的重定向URI和API权限。
  • 录制流程前清除浏览器缓存,避免会话干扰。

内容的提问来源于stack exchange,提问作者Sumit Bhave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:08:17