如何通过Oracle OCI Java SDK获取Token及Date用于Rest API请求
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
相关产品推荐
相关产品推荐

