Azure应用服务:基于配置切换REST获取用户/系统托管身份访问令牌
Azure应用服务通过REST端点获取托管身份访问令牌
应用服务的本地元数据端点是统一的:http://169.254.169.254/metadata/identity/oauth2/token,通过不同请求参数可区分使用系统托管身份或用户托管身份。
1. 使用系统托管身份获取令牌
直接调用端点即可,无需指定身份标识,AAD默认使用系统托管身份:
- 请求方法:GET 或 POST
- 必要参数:
resource:目标服务的资源ID(例如Azure Storage为https://storage.azure.com/,Azure SQL为https://database.windows.net/)metadata:必须设为true
- 请求头:必须包含
Metadata: true
示例curl请求:
curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://storage.azure.com/&metadata=true' -H 'Metadata: true'
2. 使用用户托管身份获取令牌
在请求中添加client_id或object_id参数,指定用户托管身份的对应ID,AAD会优先使用该身份而非系统托管身份:
- 额外参数:
client_id:用户托管身份的客户端ID(可在Azure门户的用户托管身份详情页查询)- 或
object_id:用户托管身份的对象ID
- 其余参数和请求头与系统托管身份一致
示例curl请求(用client_id指定):
curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://storage.azure.com/&metadata=true&client_id=你的用户托管身份客户端ID' -H 'Metadata: true'
基于配置标志切换身份
你可以通过应用服务的应用设置(例如USE_USER_ASSIGNED_IDENTITY)作为开关,在代码中动态构造请求参数:
- 当配置标志为
true时,向请求URL追加&client_id=xxx参数,调用用户托管身份的令牌 - 当配置标志为
false时,去掉该参数,使用系统托管身份的默认调用方式
注意事项
- 元数据端点仅能在应用服务内部访问,无需公网权限
- 用户托管身份必须已关联到你的应用服务,且已被授予目标资源的访问权限
- 请求头的
Metadata: true是必填项,否则请求会被拒绝
内容的提问来源于stack exchange,提问作者GAK
相关产品推荐
相关产品推荐

