Azure 文本转语音服务 returns 401 未经授权

Azure text-to-speech service returns 401 Unauthorized

我正在尝试使用 Azure 认知服务文本转语音 API,但无论我尝试什么,我都会收到 401 未经授权的响应。

我在西欧地区的订阅中创建了一个认知服务资源。类型为所有认知服务,状态为活动。我从 https://github.com/Azure-Samples/Cognitive-Speech-TTS 下载了 CSharp 示例,并将西欧 URL 和我的认知服务订阅密钥输入到代码中。当我 运行 示例时,访问令牌检索得很好,但是文本到语音请求 returns 401.

令牌URL:https://westeurope.api.cognitive.microsoft.com/sts/v1.0/issueToken

服务URL:https://westeurope.tts.speech.microsoft.com/cognitiveservices/v1

我已检查 URL 是否正确,我在两者中使用相同的区域,并且与创建的资源相同。我浏览了故障排除页面 (https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/troubleshooting) 并遇到了同样的 401 问题。我尝试了 运行ning 来自 Postman 的 TTS 请求。我已经从 Azure 门户尝试了 Key1 和 Key2,并尝试重新生成一个密钥。我已经尝试 运行也在 Azure Functions 中本地和云中处理请求。

我已经解码了访问令牌,据我所知,它似乎包含了很多正确的内容。唯一奇怪的是,exp 字段是一个字符串而不是一个数字(对于 JWT 来说是不正确的)。这可能是导致此错误的身份验证系统中的错误,还是我做错了什么?

请求

POST https://westeurope.tts.speech.microsoft.com/cognitiveservices/v1 HTTP/1.1
Authorization: Bearer <access-token>
User-Agent: TestApi
X-Microsoft-OutputFormat: audio-16khz-64kbitrate-mono-mp3
Content-Type: application/ssml+xml
Host: westeurope.tts.speech.microsoft.com
Content-Length: 209

<speak version="1.0" xml:lang="fi-FI">
  <voice name="Microsoft Server Speech Text to Speech Voice (fi-FI, HeidiRUS)" xml:lang="fi-FI">Hei, muistathan suorittaa päivän harjoitteet ajoissa.</voice>
</speak>

回应

HTTP/1.1 401 Unauthorized
X-MSEdge-Ref: Ref A: AD369D30DDB7466B8A77086554F9DC46 Ref B: HEL02EDGE0112 Ref C: 2018-12-10T13:03:43Z
Date: Mon, 10 Dec 2018 13:03:42 GMT
Content-Length: 0

要使用文本转语音服务,您必须拥有语音服务资源,而不是认知服务资源。

让人有点不清楚的是,文档中没有具体提及进行区分。认知服务资源将显示一个类型值所有认知服务,人们会认为它也包含语音功能。当您专门创建语音服务资源时,它仍列为认知服务资源。