通过托管标识从Web应用调用Azure翻译服务的方法是否正确?
使用托管标识调用Azure翻译服务的配置说明
现有步骤的问题分析
- 步骤1(启用翻译服务托管标识):这一步完全多余。需要启用托管标识的是你的Web应用,翻译服务作为被调用的资源,不需要开启托管标识。
- 步骤2(角色分配):角色选择不当。
Contributor权限过大,不符合最小权限原则,应该给托管标识分配认知服务用户(Cognitive Services User)角色,这个角色刚好拥有调用翻译服务的必要权限。 - 步骤3(代码集成):代码逻辑没问题,但要注意两个细节:
- 如果用的是用户分配托管标识,实例化
ManagedIdentityCredential时必须指定客户端ID:new ManagedIdentityCredential(clientId: "你的用户分配标识ID");系统分配标识则无需额外参数 endpoint必须是你的翻译服务专属终结点,格式类似https://<你的翻译服务名称>.cognitiveservices.azure.com/
- 如果用的是用户分配托管标识,实例化
必须补充的Web应用身份配置
你漏掉了核心步骤:为Web应用启用托管标识,操作如下:
- 打开Azure门户的Web应用资源页
- 左侧导航栏选择「标识」
- 系统分配标识:切换状态为「开启」并保存,系统会自动生成对应的托管标识
- 用户分配标识:先创建用户分配标识资源,再回到Web应用的「用户分配」标签下添加该标识
修正后的完整流程
- 为Web应用启用托管标识(系统分配/用户分配二选一)
- 在翻译服务的访问控制(IAM)中,给该托管标识分配认知服务用户角色
- 调整代码(按需适配托管标识类型):
// Initialize the Azure Translator client // 系统分配标识写法 var credential = new ChainedTokenCredential(new ManagedIdentityCredential(), new AzureCliCredential()); // 用户分配标识写法 // var credential = new ChainedTokenCredential(new ManagedIdentityCredential(clientId: "你的用户分配标识客户端ID"), new AzureCliCredential()); var translatorClient = new TranslationClient(new Uri(endpoint), credential);
内容的提问来源于stack exchange,提问作者samraj
相关产品推荐
相关产品推荐

