我最近升级了字幕翻译 - 字幕工具箱,新增加了微软翻译的功能,使用了微软翻译的API,翻译速度非常快,准确率也很高,效果非常好。
不过,好景不长,最近有网友反馈,说微软翻译的功能失效了,经过排查,调用微软翻译 API 时总是返回错误 {code: 401001, message: "The request is not authorized because credentials are missing or invalid."}
。
微软翻译 API 认证错误分析
于是我就开始查资料,官方提示:可能是未正确设置 API 密钥或区域不匹配。
可能的原因
-
API 密钥问题
- API 密钥不正确或已过期
- 环境变量
MICROSOFT_TRANSLATOR_API_KEY
未正确设置 - API 密钥已用完配额或被禁用
-
区域不匹配
- 注意代码中使用了硬编码的区域
"eastasia"
,而不是使用从环境变量获取的region
值
1
'Ocp-Apim-Subscription-Region': "eastasia", // 这里硬编码了区域
- API 密钥可能与此区域不匹配(密钥通常与特定区域绑定)
- 注意代码中使用了硬编码的区域
-
Azure 账户问题
- 账户可能存在付款问题
- 服务可能已被暂停
解决方案
-
验证 API 密钥是否正确设置在环境变量中
-
检查 API 密钥和区域是否匹配,建议修改代码使用环境变量中的区域:
1
'Ocp-Apim-Subscription-Region': region, // 使用环境变量中的区域
-
登录 Azure 门户,检查 Translator 服务状态和密钥是否有效
-
尝试在 Azure 门户中重新生成 API 密钥
我按照上面的步骤检查了一遍,发现完全没有问题,API 密钥和区域都设置正确,代码中也没有硬编码的区域。
犹疑时刻,看到了这篇帖子:
[收到错误 - { “error”: { “code”: 401001, “message”: “请求未授权,因为凭据缺失或无效。} } 在翻译服务上工作时 - Microsoft Q&A — Getting the error - { “error”: { “code”: 401001, “message”: “The request is not authorized because credentials are missing or invalid.” } } while working on Translator service - Microsoft Q&A](https://learn.microsoft.com/en-us/answers/questions/1618593/getting-the-error-((-error-((-code-401001-message)[收到错误 - { “error”: { “code”: 401001, “message”: “请求未授权,因为凭据缺失或无效。} } 在翻译服务上工作时 - Microsoft Q&A — Getting the error - { “error”: { “code”: 401001, “message”: “The request is not authorized because credentials are missing or invalid.” } } while working on Translator service - Microsoft Q&A](https://learn.microsoft.com/en-us/answers/questions/1618593/getting-the-error-((-error-((-code-401001-message)
有人说:
在阅读了 45 分钟的此类帖子、重新生成密钥、仔细检查代码等后,我发现问题与凭据丢失或无效无关。我还没有将我的计划切换到即用即付,我已经用完了我的免费配额。
这时我大概明白了,原来是微软翻译的免费额度用完了,导致了 401 错误。
为了验证这个问题,我做了两个操作:
1,在 Azure 的测试页面上测试了一下,发现确实是 401 错误。
2,请朋友免费注册了一个微软翻译的服务给我用。
- 结果发现,使用这个新的 API 密钥和区域,调用翻译 API 时没有问题。(代码没变,只是换了密钥)
所以,这个错误真正原因是微软翻译的免费额度用完了,而非认证错误。
解决方案有两个:
- 重新注册一个微软翻译的服务,获取新的 API 密钥和区域
- 购买微软翻译的服务,获取新的 API 密钥和区域