如何用JMeter对采用Azure SSO授权码流的应用进行负载测试?
针对Azure SSO授权码保护应用的JMeter负载测试方案
前置准备
- 得有Azure AD测试账号,以及应用注册的核心信息:客户端ID、客户端密钥、租户ID、授权端点、令牌端点,还要提前在Azure应用注册里配置好回调URL(比如
http://localhost:8080/callback这类本地地址就行)
- 得有Azure AD测试账号,以及应用注册的核心信息:客户端ID、客户端密钥、租户ID、授权端点、令牌端点,还要提前在Azure应用注册里配置好回调URL(比如
JMeter具体配置步骤
- 先加HTTP请求默认值:把目标应用的基础URL填进去,后面就不用每次都重复输入了
- 获取授权码
- 添加HTTP请求,指向Azure的授权端点,请求方法选GET,参数要带这些:
client_id:你的应用客户端IDresponse_type:固定填coderedirect_uri:和Azure里配置的回调URL一致scope:填目标应用需要的权限范围,比如openid offline_access加上对应的API权限state:随便填个随机字符串,用来防CSRF
- 注意:授权码流程需要用户登录Azure AD,自动化负载测试的话,推荐用JMeter的Selenium WebDriver采样器模拟无头浏览器登录,自动抓取授权码;手动测试可以先在浏览器里拿到授权码再填到JMeter里,但负载测试必须走自动化流程
- 添加HTTP请求,指向Azure的授权端点,请求方法选GET,参数要带这些:
- 用授权码换访问令牌
- 添加HTTP请求,指向Azure的令牌端点,请求方法选POST,用表单提交参数:
grant_type:固定填authorization_codeclient_id:客户端IDclient_secret:客户端密钥code:上一步拿到的授权码redirect_uri:和授权时用的一致
- 加个JSON提取器,从返回结果里把
access_token提出来,存到变量比如${access_token}里
- 添加HTTP请求,指向Azure的令牌端点,请求方法选POST,用表单提交参数:
- 调用受保护的应用接口
- 在要测试的HTTP请求的请求头里加
Authorization: Bearer ${access_token},这样就能正常访问受Azure SSO保护的接口了
- 在要测试的HTTP请求的请求头里加
- 配置负载与参数化
- 加CSV数据文件设置,把不同的测试账号存到CSV里,参数化登录信息,避免单账号的并发限制
- 调整线程组的并发数、循环次数,设置符合需求的负载场景
常见问题排查
- 授权码拿不到:检查Azure应用注册里的回调URL是不是和JMeter里写的完全一致,权限范围有没有填对
- 令牌交换失败:看看客户端密钥是不是输错了,授权码是不是过期了(授权码只有5分钟有效期,要尽快用)
- API返回401:验证下
access_token的有效性,可以用JWT解析工具看令牌的受众、过期时间是不是符合要求
内容的提问来源于stack exchange,提问作者Ridwan Abdulazeez
相关产品推荐
相关产品推荐

