Postman预请求脚本如何获取Azure认证响应的Authorization_code
核心限制说明
Postman预请求脚本运行在隔离的JS沙箱中,没有浏览器渲染能力,也无法直接监听网络端口接收回调,不存在纯预请求脚本无依赖完成Authorization Code流程的实现——这个流程本身的设计就要求经过用户代理(浏览器)完成身份核验(尤其是Azure AD开启MFA、条件访问策略的场景,必须人工操作),你之前提到的「向authorize地址发POST请求」是认知错误,该接口为GET请求,且无法绕过交互环节直接返回授权码。
可落地方案
方案1:使用Postman原生OAuth2授权能力(推荐,稳定无额外代码)
这是Postman原生支持的能力,不需要自己写监听回调的逻辑:
- 打开集合或单个请求的
Authorization配置页,授权类型选择OAuth 2.0 - 按如下规则填写配置:
- Grant type 选择
Authorization Code - Callback URL 填写
https://www.getpostman.com/oauth2/callback,Postman内部会自动拦截跳转到这个地址的请求,提取URL中的code参数,不需要你手动监听 - Auth URL填写对应Azure租户的授权端点:
https://login.microsoftonline.com/{替换为你的租户ID}/oauth2/v2.0/authorize - Access Token URL填写对应Azure租户的令牌端点:
https://login.microsoftonline.com/{替换为你的租户ID}/oauth2/v2.0/token - 补充填写Client ID、Client Secret、请求所需的Scope参数
- Grant type 选择
- 勾选
Authorize using browser选项,首次使用时点击「Get New Access Token」,在弹出的浏览器页面完成Azure AD登录校验即可。后续Postman会自动存储拿到的refresh_token,access_token过期时会自动换发新令牌,不需要重复手动登录。
方案2:自定义预请求脚本实现(适合需要高度自定义逻辑的测试场景)
如果一定要把逻辑写在预请求脚本中,需要额外配合本地运行的轻量回调服务接收授权码,步骤如下:
- 本地运行一个极简的HTTP服务,用来接收Azure的回调请求,同时提供接口给Postman脚本查询拿到的授权码,示例服务代码(本地Node环境运行,不需要放到Postman里):
const http = require('http'); let latestCode = null; const server = http.createServer((req, res) => { const requestUrl = new URL(req.url, 'http://localhost:3000'); // 接收Azure回调 if (requestUrl.pathname === '/callback') { latestCode = requestUrl.searchParams.get('code'); res.end('Authorization completed, you can close this page now'); return; } // 给Postman脚本提供查询code的接口 if (requestUrl.pathname === '/get-code') { res.setHeader('Access-Control-Allow-Origin', '*'); res.end(latestCode || ''); return; } }); server.listen(3000, () => console.log('Callback service running at http://localhost:3000'));
- 把Azure AD应用的重定向URI配置为
http://localhost:3000/callback - 预请求脚本逻辑参考:
- 先检查环境变量中是否存在未过期的access_token,存在则直接使用
- 不存在则拼接好Azure授权URL,通过控制台输出提示,让用户手动在浏览器打开该URL完成登录
- 脚本轮询请求本地服务的
http://localhost:3000/get-code接口,直到拿到非空的code值 - 拿到code后调用Azure令牌端点,用code换access_token和refresh_token,存储到Postman环境变量中供后续请求使用
注意:该方案仅适合测试环境使用,无法绕过Azure AD的MFA、条件访问等安全策略,每次授权码过期后仍需要人工打开浏览器完成一次登录操作。
内容的提问来源于stack exchange,提问作者Filip M.
相关产品推荐
相关产品推荐

