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

PowerShell自签名证书客户端凭证认证脚本无TokenResponse排查求助

问题排查与修复方案

1. 修复授权端点错误

你的脚本错误使用了原生应用的交互式授权端点,客户端凭证流必须使用租户专属的Token端点:

  • 替换当前的$authUri为v2版本端点:
$authUri = "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token"

或旧版端点:

$authUri = "https://login.microsoftonline.com/$TenantName/oauth2/token"

注意:禁止使用common,客户端凭证认证是租户级操作,必须指定具体租户域名或ID。

2. 移除无效的Authorization请求头

客户端凭证流通过client_assertion参数传递JWT,不需要在请求头中添加Authorization: Bearer $JWT,这会导致请求格式错误:

  • 删除以下代码块:
$Header = @{
    Authorization = "Bearer $JWT"
}
  • 修改Invoke-RestMethod调用,去掉-Header $Header参数:
$TokenResponse = Invoke-RestMethod -Uri $authUri -Method POST -Body $Body

3. 检查证书私钥权限

LocalMachine存储区的证书私钥默认可能未开放给运行脚本的账户(包括管理员)读取权限:

  1. 打开证书管理器(certlm.msc),定位目标证书
  2. 右键→所有任务→管理私钥
  3. 添加当前运行脚本的账户,授予读取权限

4. 添加错误捕获定位具体问题

原脚本无错误处理逻辑,无法获取Azure AD返回的具体失败原因,添加异常捕获代码:

try {
    $TokenResponse = Invoke-RestMethod -Uri $authUri -Method POST -Body $Body -ErrorAction Stop
    $TokenResponse
} catch {
    Write-Host "请求失败详情:"
    Write-Host "错误信息: $($_.Exception.Message)"
    if ($_.Exception.Response) {
        $responseContent = $_.Exception.Response.Content.ReadAsStringAsync().Result
        Write-Host "响应内容: $responseContent"
    }
}

运行后可直接查看Azure AD返回的错误详情(如证书不匹配、权限配置问题等)。

5. 验证JWT的aud字段一致性

确保JWT payload中的aud值与请求的authUri完全一致:

  • 若使用v2端点,aud应设为https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token
  • 若使用旧版端点,aud应设为https://login.microsoftonline.com/$TenantName/oauth2/token

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:20:51