如何在客户端隐藏Azure Cognitive Services(语音服务)订阅密钥?
Azure语音服务客户端隐藏订阅密钥的可行方案
一、用Azure函数应用做中间后端
这是最直接的方案,把语音服务的调用逻辑全放在函数应用里,客户端只跟函数打交道,订阅密钥藏在函数的配置里,完全不会暴露给前端。
- 步骤:
- 创建Azure函数应用,选个顺手的运行时(Python、C#都行)。
- 在函数应用的应用设置里添加语音服务的订阅密钥和区域,作为环境变量,代码里直接读环境变量就行,比如Python里用
os.environ["SPEECH_KEY"]。 - 写函数接口,接收客户端发过来的音频或文本数据,在函数内部调用语音服务的SDK或者REST API处理,再把结果返回给客户端。
- 给函数加访问控制,比如开Azure AD认证或者设API密钥,防止随便调用。
二、用Azure AD令牌代替订阅密钥
官方更推荐这种方式,用短期的访问令牌替代长期有效的订阅密钥,就算令牌泄露了,危害也有限。
- 实现要点:
- 在Azure AD里注册一个应用,给这个应用加语音服务的访问权限(找
Cognitive Services Speech的API权限)。 - 客户端用Azure AD SDK或者OAuth2流程拿访问令牌,令牌一般1小时过期,过期了再重新获取就行。
- 调用语音服务的时候,请求头里带
Authorization: Bearer <令牌>,不用再传订阅密钥。 - 注意:客户端的Azure AD凭证(比如客户端ID、密钥)也要安全存,比如用设备的安全存储或者Azure Key Vault。
- 在Azure AD里注册一个应用,给这个应用加语音服务的访问权限(找
三、用Azure API管理封装语音服务
把语音服务的API导入到APIM里,客户端调用APIM的端点,由APIM自动把订阅密钥加到请求里转发给语音服务。
- 好处:
- 能给API加各种策略,比如限制调用速率、设IP白名单,安全性更高。
- 支持多种认证方式,不管是API密钥还是Azure AD都能用,方便控制谁能访问。
- 订阅密钥全存在APIM的后端配置里,客户端根本碰不到。
内容的提问来源于stack exchange,提问作者fatdrogen
相关产品推荐
相关产品推荐

