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

使用msal-node通过刷新令牌获取访问令牌时触发AADSTS700025错误

排查AADSTS700025错误:公共客户端不应提交client_assertion或client_secret

错误原因

AADSTS700025的核心问题是:你的Azure AD应用被配置为公共客户端(比如SPA、移动应用、桌面应用这类无法安全存储密钥的应用),但代码里误用了ConfidentialClientApplication——这个类是给机密客户端(后端服务、Web应用)设计的,它会默认尝试携带客户端凭证(client_secret或client_assertion),而公共客户端的认证流程明确禁止提交这类凭证,因此Azure AD直接拒绝了请求。

解决方法

  1. 确认Azure AD应用类型
    登录Azure门户找到你的应用注册,进入「认证」页面,在「高级设置」里查看「允许公共客户端流」的状态:如果设为「是」,说明这是公共客户端,必须用对应MSAL类处理。

  2. 替换MSAL客户端类
    将代码中的ConfidentialClientApplication替换为PublicClientApplication——这是MSAL专为公共客户端提供的类,不会自动携带客户端凭证,适配公共客户端的认证规则。

  3. 清理配置中的机密项
    检查你的msalConfig,确保里面没有clientSecret这类属于机密客户端的配置字段,公共客户端只需要clientId、authority等基础配置项。

修改后的代码示例

if(createEventResponse === undefined){
    console.log("token-expired")

    const scopes = ["https://graph.microsoft.com/user.read"];

    // 替换为PublicClientApplication
    const pca = new PublicClientApplication(msalConfig);

    pca.acquireTokenByRefreshToken({
        refreshToken: refreshToken,
        scopes: scopes,
    })
    .then((response) => {
        console.log(response)
        const newAccessToken = response.accessToken;
        console.log('New Access token:', newAccessToken);
        // 后续业务操作
    })
    .catch((error) => {
        console.error('Token acquisition error:', error);
    });
}

额外说明

如果你的服务本质是机密客户端(比如后端Web应用),那需要去Azure门户将应用的「允许公共客户端流」设为「否」,同时确保msalConfig中正确配置clientSecret或客户端证书,继续使用ConfidentialClientApplication即可。

内容的提问来源于stack exchange,提问作者Tejas Sanjay Chaudhari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:27:20