如何在Java中获取Azure认知服务文本转语音的访问令牌
Azure认知服务文本转语音访问令牌Java HttpClient实现
以下代码完全对应你提供的C#版本逻辑,使用Java 11及以上版本自带的java.net.http.HttpClient实现,无需引入第三方依赖:
import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class Authentication { // 令牌请求地址,需和你创建认知服务的区域匹配,示例为westus区域 public static final String FETCH_TOKEN_URI = "https://westus.api.cognitive.microsoft.com/sts/v1.0/issueToken"; private String subscriptionKey; private String token; public Authentication(String subscriptionKey) { this.subscriptionKey = subscriptionKey; // 同步等待令牌返回,和原C#代码中调用.Result的逻辑一致 this.token = fetchToken(FETCH_TOKEN_URI, subscriptionKey); } public String getAccessToken() { return this.token; } private String fetchToken(String fetchUri, String subscriptionKey) { HttpClient client = HttpClient.newHttpClient(); // 构造POST请求,添加认证请求头,无请求体 HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(fetchUri)) .header("Ocp-Apim-Subscription-Key", subscriptionKey) .POST(HttpRequest.BodyPublishers.noBody()) .build(); try { HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.printf("Token Uri: %s%n", fetchUri); return response.body(); } catch (Exception e) { throw new RuntimeException("获取Azure访问令牌失败", e); } } }
如果你使用的是Java 8及以下版本,没有自带的HttpClient,可以替换为Apache HttpClient或者OkHttp实现相同逻辑,核心逻辑不变:发送携带
Ocp-Apim-Subscription-Key请求头的空POST请求到令牌接口,读取响应内容即可拿到访问令牌。
使用注意事项
- 代码中默认的令牌请求地址对应westus区域,如果你创建认知服务的区域不是westus,需要修改
FETCH_TOKEN_URI中的区域字段为实际区域 - Azure认知服务的访问令牌有效期为10分钟,生产环境使用建议添加缓存逻辑,到期前自动刷新令牌,避免频繁请求令牌接口影响性能
- 上述代码为了对齐原C#逻辑使用了同步调用,如果需要异步实现,可以调用
HttpClient.sendAsync方法获取CompletableFuture做异步处理
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

