Azure 文本转语音服务返回 401 Unauthorized

Ale*_*rön 2 text-to-speech azure microsoft-cognitive azure-cognitive-services

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

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

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

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

我已经检查过 URL 是否正确,我在两者中使用相同的区域,并且与创建的资源使用相同的区域。我浏览了故障排除页面(https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/troubleshooting)并遇到了相同的 401 问题。我尝试运行来自 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>
Run Code Online (Sandbox Code Playgroud)

回复

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
Run Code Online (Sandbox Code Playgroud)

Ale*_*rön 6

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

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