Authentication Example

最終更新日:2025-09-22 10:04:18

認証トークン(Token)生成方法を2つのプログラミング言語で解説します:

Python実行可能サンプル
提供されたサンプルコード内のYOUR_ACCESS_KEYYOUR_ACCESS_KEY_SECRETYOUR_REQUEST_BODYを実際の値に置換後、コードを実行することでトークン(Token)値が出力されます。

import hashlib
import hmac
import base64
import urllib

def build_signing_str(path, query, body):
    connector = '\n'
    signing_str = path
    if query: 
        signing_str += '?' + query
    signing_str += connector
    if body: 
        signing_str += body
    return signing_str

def get_signature_hmac_sha1(data, key):
    hmac_sha1 = hmac.new(key.encode(), data.encode(), hashlib.sha1)
    return hmac_sha1.hexdigest()

def url_safe_encode_bytes(src):
    b64 = base64.urlsafe_b64encode(src.encode())
    return b64.decode()

def generate_access_token(accessKey, encodeSign):
    return "{}:{}".format(accessKey, encodeSign)

実行例:
path = "/fops"
query = ""
body = "YOUR_REQUEST_BODY"
secretKey = "YOUR_ACCESS_KEY_SECRET"
accessKey = "YOUR_ACCESS_KEY"

signing_str = build_signing_str(path, query, body)
sign = get_signature_hmac_sha1(signing_str, secretKey)
encode_sign = url_safe_encode_bytes(sign)
access_token = generate_access_token(accessKey, encode_sign)

print(access_token)

Javaサンプル

  1. 署名対象文字列(StringToSign)の生成
// 改行文字で接続し、パス/クエリ/ボディを結合して署名用文字列を構築
private String buildSigningStr(String path, String query, String body) {
    char connector = '\n';
    StringBuilder signingStrBuilder = new StringBuilder(path);
    if (StringUtils.isNotEmpty(query)) signingStrBuilder.append('?').append(query);
    signingStrBuilder.append(connector);
    if (StringUtils.isNotEmpty(body)) signingStrBuilder.append(body);
    return signingStrBuilder.toString();
}
  1. HMAC-SHA1を使用して、 secretKey と StringToSignでシグネチャを取得します
// HMAC-SHA1アルゴリズムを用い、データとキーから署名を生成
public static String getSignatureHmacSHA1(byte[] data, String key) {
    byte[] keyBytes = key.getBytes();
    SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
    Mac mac;
    StringBuffer sb = new StringBuffer();
    try {
        mac = Mac.getInstance("HmacSHA1");
        mac.init(signingKey);
        byte[] rawHmac = mac.doFinal(data);

        for (byte b : rawHmac) {
            sb.append(byteToHexString(b));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return sb.toString();
}
  1. 署名されたデータ Sign に対してURLセーフなBase64エンコードを実行し、 encodeSign を取得します
// URLセーフなBase64エンコードを実施(4の倍数長になるよう'='でパディング)
public static byte[] urlSafeEncodeBytes(byte[] src) {
    if (src.length % 3 == 0) return encodeBase64Ex(src);
    byte[] b = encodeBase64Ex(src);
    if (b.length % 4 == 0) return b;

    int pad = 4 - b.length % 4;
    byte[] b2 = new byte[b.length + pad];
    System.arraycopy(b, 0, b2, 0, b.length);
    b2[b.length] = '=';
    if (pad > 1) b2[b.length + 1] = '=';
    return b2;
}
  1. accessKey と encodeSign を ‘:’ で接続し、トークンを取得します(Token)。
String accessToken = String.format("%s:%s", accessKey, encodeSign);