Azure应用注册消除Client Secret依赖的方案咨询及配置疑问
替换Client Secret的联邦身份凭据(FIC)配置全流程
一、先明确适配场景
你的需求是去掉client_secret完成client_credentials流认证,且不想依赖MSAL,联邦身份凭据(FIC)是最适配的方案——它通过云环境的身份提供商(比如Azure托管身份、GitHub OIDC等)生成身份断言,替代client_secret完成认证。
下面以最常用的Azure资源(VM/函数应用等)+托管身份场景为例,给出完整操作步骤:
二、Azure Portal配置联邦身份凭据
1. 进入目标应用注册
登录Azure Portal → 搜索「应用注册」→ 找到你正在使用的应用注册。
2. 创建联邦身份凭据
- 左侧菜单选「证书和密码」→ 切换到「联邦身份凭据」标签页 → 点击「添加凭据」
- 按以下规则填写字段:
- 凭据类型:选择「Azure资源」
- 颁发者:固定填
https://sts.windows.net/{你的租户ID}/(租户ID可在应用注册「概述」页获取) - 主体名称:填写你的托管身份的客户端ID(系统分配托管身份在对应资源的「身份」→「系统分配」页找;用户分配托管身份直接看其自身的客户端ID)
- 受众:默认填
api://AzureADTokenExchange(固定值,无需修改) - 描述:自定义填写,比如「VM托管身份访问应用注册」
- 点击「添加」保存配置
3. 给托管身份授予权限(关键步骤)
- 复制应用注册的「应用程序(客户端)ID」和「目录(租户)ID」
- 进入对应托管身份的配置页(或直接在应用注册的「API权限」页)→ 点击「添加权限」→ 选择「我的API」→ 找到你的应用注册 → 勾选和之前用
client_secret时一致的权限 → 点击「添加权限」 - 若需要管理员同意,完成对应操作(和之前的权限流程一致)
三、修改令牌请求(无需Client Secret)
1. 先从托管身份获取OIDC令牌
向Azure托管身份的本地元数据端点发起请求(以VM为例):
GET http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://sts.windows.net/{你的租户ID}/
返回结果中的access_token就是我们需要的OIDC身份断言。
2. 用OIDC令牌请求目标服务的Bearer令牌
调用你原来的令牌端点https://login.microsoftonline.com/{tenantId}/oauth2/token,请求体替换为以下参数:
grant_type = client_credentials client_id = <你的应用注册Application ID> client_assertion_type = urn:ietf:params:oauth:client-assertion-type:jwt-bearer client_assertion = <第一步获取的OIDC令牌> resource = <目标Microsoft服务端点>
执行请求后就能拿到和之前一致的Bearer令牌,全程无需client_secret。
四、其他场景的字段取值参考
如果你的应用运行在GitHub Actions:
- 凭据类型:选择「GitHub Actions部署」
- 颁发者:固定填
https://token.actions.githubusercontent.com - 主体名称:格式为
repo:<你的GitHub用户名>/<仓库名>:environment:<环境名>(无需环境可简化为repo:<你的GitHub用户名>/<仓库名>) - 受众:默认
api://AzureADTokenExchange
五、常见问题排查
- 若返回「invalid client assertion」:检查颁发者、主体名称是否和FIC配置完全一致,OIDC令牌是否过期(有效期1小时)
- 权限报错:确认托管身份已被授予应用注册的对应权限,且完成管理员同意
内容的提问来源于stack exchange,提问作者AzureKnight
相关产品推荐
相关产品推荐

