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

使用PowerShell为Azure AD服务主体添加可选声明适配GCP WiF配置

解决方案

1. 修正令牌受众(Audience)

你当前的报错核心原因确实是令牌受众不匹配:GCP Workload Identity Federation要求传入的Azure AD JWT令牌的aud声明必须和你在GCP侧配置的OIDC身份提供商的受众值完全一致,你当前使用的https://management.azure.com是Azure管理API的专属受众,不符合GCP要求。
你需要先从GCP IAM控制台的Workload Identity Pool配置中,获取你创建的OIDC提供商对应的受众值,标准格式为:https://iam.googleapis.com/projects/<你的GCP项目编号>/locations/global/workloadIdentityPools/<你的WIF池名称>/providers/<你的OIDC提供商名称>

2. 修改PowerShell获取令牌代码

将原代码中最后一个参数的https://management.azure.com/替换为你上一步拿到的GCP侧受众值即可,修改后示例:

$AzContext = Get-AzContext
# 替换为你GCP OIDC提供商的实际受众值
$gcpWifAudience = "https://iam.googleapis.com/projects/123456789/locations/global/workloadIdentityPools/azure-pool/providers/azure-provider"
$accesstoken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate(
    $AzContext.'Account',
    $AzContext.'Environment',
    $AzContext.'Tenant'.'Id',
    $null,
    [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never,
    $null,
    $gcpWifAudience
).AccessToken

3. 调整Azure应用注册的可选声明配置

你当前的应用清单中accessToken对应的可选声明数组为空,如果你需要在返回给GCP的访问令牌中携带额外声明(比如你配置的onprem_sid、用户组、UPN等),需要将对应声明配置添加到accessToken数组下,修改后的配置示例如下:

"optionalClaims": {
    "idToken": [
        {
            "additionalProperties": [],
            "essential": false,
            "name": "onprem_sid",
            "source": null
        }
    ],
    "accessToken": [
        // 按需添加需要在访问令牌中携带的声明,此处示例将onprem_sid加入访问令牌
        {
            "additionalProperties": [],
            "essential": true,
            "name": "onprem_sid",
            "source": null
        },
        // 如需携带组信息可添加以下配置
        {
            "additionalProperties": [],
            "essential": true,
            "name": "groups",
            "source": null
        }
    ],
    "saml2Token": []
},

修改应用清单后需等待3-5分钟让配置生效,再重新生成令牌。

4. 验证令牌合规性

生成新令牌后可自行解码JWT内容,确认两个核心校验点:

  • aud字段值与GCP OIDC提供商配置的受众完全一致
  • 你需要的可选声明已正常出现在令牌负载中

5. GCP STS接口调用注意事项

调用GCP STS接口换取访问令牌时,需确保参数符合要求:

  • grant_type固定为urn:ietf:params:oauth:grant-type:token-exchange
  • subject_token_type固定为urn:ietf:params:oauth:token-type:jwt
  • subject_token填写你获取的Azure AD JWT令牌
  • audience填写GCP OIDC提供商的资源标识符,格式与之前的受众值一致即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:15:03