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

无需服务主体访问Azure REST API:生成个人身份Bearer Token

用个人身份生成Bearer Token(Postman预请求脚本实现)

一、手动复制Token报401的排查点

你从微软Try It页面复制Token到Postman后触发InvalidAuthenticationToken错误,大概率是这几个原因:

  1. Token已过期:用户身份的Azure Token有效期默认1小时,复制后超过时效直接失效
  2. 受众不匹配:每个Azure服务API的受众(aud字段)不同,比如Data Factory API的受众是https://management.azure.com/,如果Try It生成的Token是针对其他API的,必然无法通过验证
  3. 格式错误:Postman的Bearer Token输入框只需要填Token本身,不能带Bearer 前缀——你更新里提到的错误就是因为没移除这个前缀

二、Postman预请求脚本自动生成个人身份Token

要实现和微软Try It一致的个人身份登录生成Token,本质是调用Microsoft Identity Platform的授权码流程(带PKCE),下面是两种实现方式:

方法1:Postman内置OAuth 2.0授权(推荐,最省心)

  1. 打开目标请求的Authorization标签页,授权类型选OAuth 2.0
  2. 点击Get New Access Token,按以下参数配置:
    • Token名称:自定义(比如「Data Factory 用户令牌」)
    • Grant Type:Authorization Code
    • Callback URL:填https://oauth.pstmn.io/v1/callback(Postman默认回调地址)
    • Auth URL:https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/authorize(个人账号用common替换租户ID)
    • Access Token URL:https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token
    • Client ID:可以用微软官方公共客户端ID 04b07795-8ddb-461a-bbee-02f9e1bf7b46,或者自己在Azure AD注册公共客户端应用
    • Scope:https://management.azure.com/user_impersonation offline_access(根据目标API调整,Data Factory需此权限)
    • Client Secret:留空(公共客户端无需密钥)
    • 勾选Authorize using browser
  3. 点击Request Token,在弹出的浏览器中用个人Azure账号登录授权,Postman会自动获取并保存Token
  4. 要实现预请求自动刷新,需确保Scope包含offline_access(获取Refresh Token),然后在预请求脚本中判断Token过期时间,调用刷新端点更新Token

方法2:纯预请求脚本实现(适合自动化场景)

如果不想依赖Postman内置授权,可通过脚本调用授权流程(注意:公共客户端必须使用PKCE验证):

// 预请求脚本:自动生成个人身份Bearer Token
const currentTime = Math.floor(Date.now() / 1000);
const tokenExpiry = pm.environment.get("token_expiry");

// 检查Token是否过期或未存在
if (!pm.environment.get("access_token") || tokenExpiry <= currentTime) {
    // 生成PKCE Code Verifier
    function generateCodeVerifier() {
        const array = new Uint32Array(28);
        window.crypto.getRandomValues(array);
        return Array.from(array, dec => ('0' + dec.toString(16)).slice(-2)).join('');
    }

    // 生成PKCE Code Challenge
    function generateCodeChallenge(verifier) {
        return window.crypto.subtle.digest("SHA-256", new TextEncoder().encode(verifier))
            .then(digest => btoa(String.fromCharCode(...new Uint8Array(digest)))
                .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''));
    }

    const codeVerifier = generateCodeVerifier();
    pm.environment.set("code_verifier", codeVerifier);

    generateCodeChallenge(codeVerifier).then(challenge => {
        const authUrl = `https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=04b07795-8ddb-461a-bbee-02f9e1bf7b46&response_type=code&redirect_uri=https://oauth.pstmn.io/v1/callback&response_mode=query&scope=https://management.azure.com/user_impersonation offline_access&code_challenge=${challenge}&code_challenge_method=S256`;
        console.log("请访问以下地址完成登录授权:", authUrl);
        // 注:手动处理回调需将返回的code存入环境变量,再调用token端点获取Token,因此更推荐方法1
    });
}

// 将有效Token添加到请求头
pm.request.headers.add({key: "Authorization", value: `Bearer ${pm.environment.get("access_token")}`});

三、Token有效性验证

拿到Token后,可通过JWT解码工具查看关键字段:

  • aud:必须与目标API的受众一致(比如Data Factory为https://management.azure.com/)
  • exp:确认Token未过期
  • oid:验证是否为当前用户的ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:55:22