返回
OBS鉴权实现的宝典秘籍,助你轻松玩转OBS!
见解分享
2023-10-24 20:13:57
OBS 鉴权:轻松玩转云存储的独到宝典
在云存储领域,OBS(Object Storage Service)以其卓越的稳定性、安全性以及高性价比备受瞩目。要充分利用 OBS 提供的强大功能,掌握其鉴权机制至关重要。本文将为你揭秘 OBS 鉴权实现的宝典秘籍,助你轻松玩转 OBS!
认识 OBS 鉴权机制
OBS 采用行业标准的 HTTP 协议进行交互。在调用 OBS API 之前,需要通过鉴权机制验证用户的身份,确保数据的安全和访问控制。OBS 提供了两种主要的鉴权方式:
- OBS Access Key 鉴权 :类似于 AWS 的 Access Key 和 Secret Key,通过 OBS Access Key 和 Secret Key 对请求进行签名,以验证用户的身份。
- STS 鉴权 :使用阿里云 STS 服务获取临时访问凭证,包括 Access Key ID、Access Key Secret 和 Security Token。
掌握 OBS Access Key 鉴权
OBS Access Key 鉴权是较为常见的方式,它通过 OBS Access Key 和 Secret Key 对请求进行签名,以验证用户的身份。具体步骤如下:
- 获取 OBS Access Key 和 Secret Key :前往 OBS 控制台,在“管理”页面中获取你的 Access Key 和 Secret Key。注意,Secret Key 只能获取一次,请妥善保管。
- 构建鉴权字符串 :鉴权字符串包含以下部分(以换行符分隔):
- HTTP 请求方法(如 GET、PUT 等)
- 资源路径(如 /bucket-name/object-key)
- Date(遵循 RFC2616 格式,如:Sun, 06 Nov 2022 08:09:21 GMT)
- 所有请求头中的 x-obs- 开头的 header(按字典顺序排列,每个 header 一行)
- 所有请求参数(按字典顺序排列,每个参数一行)
- 计算签名字符串 :使用 HMAC-SHA1 算法,以 Secret Key 为密钥,对鉴权字符串进行签名,得到签名字符串。
- 生成鉴权头 :将 Access Key 和签名字符串拼接为“Authorization”头,格式为:AWS {Access Key}:{签名字符串}。
import com.aliyun.oss.common.auth.HmacSHA1Signature;
import com.aliyun.oss.common.utils.CodingUtils;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class ObsAccessKeyAuthExample {
public static void main(String[] args) {
// 你的 OBS Access Key
String accessKey = "AKIAIOSFODNN7EXAMPLE";
// 你的 OBS Secret Key
String secretKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";
// 构建鉴权字符串
String authString = buildAuthString(accessKey);
// 计算签名字符串
String signature = HmacSHA1Signature.computeSignature(authString, secretKey);
// 生成鉴权头
String authorization = "AWS " + accessKey + ":" + signature;
// 使用 OBS 鉴权进行操作
// ...
}
private static String buildAuthString(String accessKey) {
// 你的 HTTP 请求方法
String method = "GET";
// 你的资源路径
String resourcePath = "/example-bucket/example-object";
// 你的请求时间
String date = "Sun, 06 Nov 2022 08:09:21 GMT";
StringBuilder authString = new StringBuilder();
authString.append(method).append("\n");
authString.append(resourcePath).append("\n");
authString.append(date).append("\n");
// 你的请求头
// ...
// 你的请求参数
// ...
return authString.toString();
}
}
灵活运用 STS 鉴权
STS 鉴权通过阿里云 STS 服务获取临时访问凭证,避免了长期持有 Access Key 和 Secret Key 的安全风险。它适用于需要动态授予访问权限的场景,如多用户协作或云上资源的临时授权。STS 鉴权的步骤如下:
- 获取 STS 凭证 :调用阿里云 STS 服务的 GetFederationToken 接口,获取 Access Key ID、Access Key Secret 和 Security Token。
- 构建 STS 鉴权字符串 :鉴权字符串包含以下部分(以换行符分隔):
- HTTP 请求方法(如 GET、PUT 等)
- 资源路径(如 /bucket-name/object-key)
- Date(遵循 RFC2616 格式,如:Sun, 06 Nov 2022 08:09:21 GMT)
- 所有请求头中的 x-obs- 开头的 header(按字典顺序排列,每个 header 一行)
- 所有请求参数(按字典顺序排列,每个参数一行)
- 计算签名字符串 :使用 HMAC-SHA1 算法,以 Access Key Secret 为密钥,对鉴权字符串进行签名,得到签名字符串。
- 生成鉴权头 :将 Security Token 和签名字符串拼接为“Authorization”头,格式为:OBS {Access Key ID}:{签名字符串}。
import com.aliyun.oss.common.auth.ServiceSignature;
import com.aliyun.oss.common.utils.CodingUtils;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class ObsStsAuthExample {
public static void main(String[] args) {
// 你的 STS Access Key ID
String accessKeyId = "STS.XXXXXXXXXXXXXXXXXXXXXXXXXXX";
// 你的 STS Access Key Secret
String accessKeySecret = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";
// 你的 STS Security Token
String securityToken = "CAISI3FhcHBFaFpBd2V1SWhoZVdwWmUwMXAyZnpkU2JuSVlVS0FHUmphaUlpVkVId0hiTUlHWENjZkVUYkRXVlE5WWlBOEl4NnlhT0drNjh5NTR0T2R5eEFsZmhGYWVsdGZKdExFS2taVkYzYWJsd1pzUmp3QUNBVUlkdDNGcGlVckZBRU9GY1o0S3d5R1FJV01BSVFYRVZPV21NWVlhOXZ5cm1VNVZ4S0JuQkFVQ1cxNWRIVmEzUkQ4dURzZGQ0VEh4b3h1em4zWE1FaFlXbFNBU0VEU0ZRQlJVa1pHRDFZWldGV0FPN2lqdVJ3b3J2dXlTQU1HWFhwV29YbUVzVzNOUlhmOWc1WFlXaWNqUXNQS1hzNVBuN0dnZ25VWFJHSU1BQk1Ha0FVQ0hCUTAyVVp1WU1BVU1qVEk1SjZUV1kxUlp3b0NBUVVkSlNhUVlBRlR2M2NVU0VWQ0lpVXlUTU5MRU5kTkNqUUlRRlZvMFdJQ0NqQWdNQ1lWSFJBR0VMQ0JnbG5WdW5pdm91Qlk4eVpWVFlWWnZmVU1UTlVrUlZVcGRnSVpZUXpOVk5nSjNNa0JwQXdJQ0NqQWdNQ1lWSFJBR0VMQ0JnbG5WdW5pdm91Qlk4eVpWVFlWWnZmVU1UTlVrUlZVcGRnSVpZUXpOVk5nSjNNa0JwQXdJQ0NqQWdNQ1lWSFJBR0VMQ0JnbG5WdW5pdm91Qlk4eVpWVFlWWnZmVU1UTlVrUlZVcGRnSVpZUXpOVk5nSjNNa0JwQXdJQ0NqQWdNQ1lWSFJBR0VMQ0JnbG5WdW5pdm91Qlk4eVpWVFlWWnZmVU1UTlVrUlZVcGRnSVpZUXpOVk5nSjNNa0JwQXdJQ0NqQWdNQ1lWSFJBR0VMQ0JnbG5WdW5pdm91Qlk4eVpWVFlWWnZmVU1UTlVrUlZVcGRnSVpZUXpOVk5nSjNNa0JwQXdJQ0NqQWdNQ1lWS