返回

OBS鉴权实现的宝典秘籍,助你轻松玩转OBS!

见解分享

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 对请求进行签名,以验证用户的身份。具体步骤如下:

  1. 获取 OBS Access Key 和 Secret Key :前往 OBS 控制台,在“管理”页面中获取你的 Access Key 和 Secret Key。注意,Secret Key 只能获取一次,请妥善保管。
  2. 构建鉴权字符串 :鉴权字符串包含以下部分(以换行符分隔):
    • HTTP 请求方法(如 GET、PUT 等)
    • 资源路径(如 /bucket-name/object-key)
    • Date(遵循 RFC2616 格式,如:Sun, 06 Nov 2022 08:09:21 GMT)
    • 所有请求头中的 x-obs- 开头的 header(按字典顺序排列,每个 header 一行)
    • 所有请求参数(按字典顺序排列,每个参数一行)
  3. 计算签名字符串 :使用 HMAC-SHA1 算法,以 Secret Key 为密钥,对鉴权字符串进行签名,得到签名字符串。
  4. 生成鉴权头 :将 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 鉴权的步骤如下:

  1. 获取 STS 凭证 :调用阿里云 STS 服务的 GetFederationToken 接口,获取 Access Key ID、Access Key Secret 和 Security Token。
  2. 构建 STS 鉴权字符串 :鉴权字符串包含以下部分(以换行符分隔):
    • HTTP 请求方法(如 GET、PUT 等)
    • 资源路径(如 /bucket-name/object-key)
    • Date(遵循 RFC2616 格式,如:Sun, 06 Nov 2022 08:09:21 GMT)
    • 所有请求头中的 x-obs- 开头的 header(按字典顺序排列,每个 header 一行)
    • 所有请求参数(按字典顺序排列,每个参数一行)
  3. 计算签名字符串 :使用 HMAC-SHA1 算法,以 Access Key Secret 为密钥,对鉴权字符串进行签名,得到签名字符串。
  4. 生成鉴权头 :将 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