You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Oracle OCI Java SDK获取Token及Date用于Rest API请求

解决方案:通过OCI Java SDK生成API请求的Authorization和Date头部

OCI Java SDK内置了请求签名工具类,无需手动拼接Token和Date,直接用RequestSigner就能生成符合要求的请求头部,以下是具体实现步骤:

1. 初始化身份认证配置

先读取本地OCI配置文件(默认路径为~/.oci/config),或手动构建认证提供者:

import com.oracle.bmc.auth.AuthenticationDetailsProvider;
import com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider;
import com.oracle.bmc.config.ConfigFile;
import com.oracle.bmc.config.ConfigFileReader;

// 读取默认配置文件
ConfigFile configFile = ConfigFileReader.parseDefault();
AuthenticationDetailsProvider authProvider = new ConfigFileAuthenticationDetailsProvider(configFile);

2. 创建请求签名器

通过认证提供者初始化DefaultRequestSigner,它负责生成签名头部:

import com.oracle.bmc.signing.DefaultRequestSigner;
import com.oracle.bmc.signing.RequestSigner;

RequestSigner signer = new DefaultRequestSigner(authProvider);

3. 为HTTP请求添加签名头部

方式一:使用HttpURLConnection

签名器会自动为连接注入Authorization、Date等必要头部:

import java.net.HttpURLConnection;
import java.net.URL;

URL apiUrl = new URL("https://your-oci-api-endpoint");
HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
connection.setRequestMethod("GET");

// 执行签名,自动添加头部
signer.signRequest(connection);

// 发送请求并处理响应
int responseCode = connection.getResponseCode();

方式二:自定义HTTP客户端(如OkHttp)

如果用第三方HTTP客户端,可通过签名器获取头部集合,手动添加到请求中:

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.net.URI;
import java.util.Collections;
import java.util.Map;

OkHttpClient client = new OkHttpClient();
URI apiUri = URI.create("https://your-oci-api-endpoint");

// 生成签名头部集合
Map<String, String> signedHeaders = signer.signRequest(
        "GET",  // 请求方法
        apiUri,
        Collections.emptyMap(),  // 自定义头部(可选)
        null    // 请求体(POST/PUT时传入字节数组)
);

// 构建请求并注入签名头部
Request.Builder requestBuilder = new Request.Builder().url(apiUri.toString());
for (Map.Entry<String, String> header : signedHeaders.entrySet()) {
    requestBuilder.addHeader(header.getKey(), header.getValue());
}

Request request = requestBuilder.build();
Response response = client.newCall(request).execute();

关键说明

  • Date头部:签名器会自动生成符合RFC 1123标准格式的时间字符串,无需手动设置
  • Authorization头部:OCI的授权头并非普通Bearer Token,而是包含密钥ID、签名算法、请求签名等信息的结构化字符串,由签名器自动生成

如果需要单独获取这两个头部的值,直接从signedHeaders集合中提取即可:

String authorizationValue = signedHeaders.get("Authorization");
String dateValue = signedHeaders.get("Date");

内容的提问来源于stack exchange,提问作者Gonzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:40:32