使用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-exchangesubject_token_type固定为urn:ietf:params:oauth:token-type:jwtsubject_token填写你获取的Azure AD JWT令牌audience填写GCP OIDC提供商的资源标识符,格式与之前的受众值一致即可
内容的提问来源于stack exchange,提问作者Kamsiinov
相关产品推荐
相关产品推荐

