[重要] API活用ガイドドキュメントサポート終了(Deprecated)のご案内

本APIドキュメントはNAVERクラウドプラットフォームの拡張性のあるAPIの提供のためにDeprecatedされ、公式的には使われず、今後、使用停止になる予定です。(2018年12月)
新しく提供されるNcloud APIs共通ガイドでNAVERクラウドプラットフォームAPIの使用方法について確認してください。



=========================================== @deprecatedドキュメント(~2018年12月) ==========================================



概要

NAVERクラウドプラットフォームとNAVERクラウドプラットフォームAPIを定義し、NAVERクラウドプラットフォームAPIの認証方式であるOAuth認証方式について説明します。

NAVERクラウドプラットフォームはNAVERの最新のコンピューティング技術と運用ノーハウが蓄積されたクラウトサービスです。 NAVERクラウドプラットフォームで提供する様々な商品群の中でソリューション商品を利用できるように提供する応用プログラムインターフェース(API)をNAVERクラウドプラットフォームAPIといいます。

NAVERクラウドプラットフォームAPIは標準化されたOAuth認証を利用します。OAuth認証方式では別途のシステムがログイン情報を保存するのではなく、暗号化された認証トークンの利用のみでリソースにアクセスできるように許可するため安全です。また、様々なプラットフォームのオープンライブラリ(OAuth Client Library)を使用できるようにサポートします。NAVERクラウドプラットフォームで提供するAPIはこのようなOAuth認証方式の統一された体系を使って認証を処理します。

OAuth認証方式

従来のアプリケーションあるいはウェブサービスではアイディとパスワードを使ってユーザー認証を行います。このような認証方式ではアプリケーションを制作したりウェブサービスを運用する会社によってそれぞれ異なる方法でユーザーを確認します。しかし、標準化されたOAuth認証方式を利用すれば、該当の認証を共有するアプリケーションあるいはウェブサービスとの間に別途の認証が必要でないため、デベロッパーの立場からはより簡単に認証手続きを具現することができます。

3-legged OAuth認証方式

OAuth認証方式は典型的に3 party system(User, Consumer, Service Provider)の形で考案されています。このような方式を3-legged認証方式といいます。

  • User: Service Providerにアカウントを持つユーザー
  • Consumer: Userの代わりにService ProviderにアクセスするためにOAuthを使用するウェブサービスあるいはアプリケーション
  • Service Provider: OAuthを使ってアクセスを許可するウェブアプリケーション

2-legged OAuth認証方式

NAVERクラウドプラットフォームAPIではConsumerとService Providerが同じなので、3-legged認証方式より簡素化された2-legged認証方式をサポートしています。

つまり、3 party system構造でConsumerが省略された構造です。2-legged OAuth認証方式の流れは次の通りです。

NAVERクラウドプラットフォームAPIで使用するOAuthのバージョンはOAuth 1.0a(http://tools.ietf.org/html/rfc5849)がベースです。

OAuth認証方式を適用してNAVERクラウドプラットフォームAPIを使用する方法を説明します。

NAVERクラウドプラットフォームAPIを使用するためには次のようなプロセスを経なければなりません。

  • API認証キーの発行(省略可能)
  • API URLの検証(省略可能)
  • OAuth認証クライアントの具現

API認証キーは基本的に発行され、API URLの検証も便宜のために提供されるサービスなので、省略できます。

API認証キーの発行

NAVERクラウドプラットフォームのアカウントが作成されると、基本的にNAVERクラウドプラットフォームAPI認証キーが1つ発行されます。 発行された認証キーはNAVERクラウドプラットフォームポータルのウェブサイトにログインした後、マイページ > API認証キー管理で確認できます。

認証キーはアカウント作成の際に自動で発行されるものの他にユーザーがもう1つ作成できるので、2つまで発行できます。認証キーを使用しないように設定したり削除した場合、有効でないキーとして認識されます。

API認証キーはAccess KeyとSecret Keyのペアで構成されています。Access KeyはAPIを認証する際にパラメータに直接転送され、Secret KeyはOAuth_signatureパラメータを署名する際に使用します。

API URLの検証

OAuth認証の際にOAuthパラメータを転送する方式には2つがあります。HTTP呼び出しの際、GET方式でURL自体にOAuth認証に必要なパラメータを付けて送る方式と、HTTPヘッダに入れて送る方式があります。

区分 説明
目的 APIを使用するためにNAVERクラウドプラットフォームで取得しなければならない情報を確認できます。
API認証キーの値の有効性を確認できます。
API動作の状態と結果を確認できます。
UI確認の値 URL機能動作対象のURL(例: コンテナ名/ファイル名)
API URL (GET)
http://restapi.fs.ncloud.com{URL}?
&oauth_consumer_key={Access Key}
&oauth_timestamp={timestamp}
&oauth_signature={oauth signature}
&oauth_nonce={nonce値}
&oauth_signature_method=HMAC-SHA1
&oauth_version=1.0
例示)
http://restapi.fs.ncloud.com/{コンテナ名}?
{該当の機能}
&oauth_consumer_key={Access Key}
&oauth_timestamp={timestamp}
&oauth_signature={oauth signature}
&oauth_nonce={nonce値}
&oauth_signature_method=HMAC-SHA1
&oauth_version=1.0
入力の値 認証Access Keyの選択(例: xoiOTgN2sgjDb5oRzp8q).
認証Secret Key(認証Access Keyの選択によって自動で選択される).
(例: SMSyGbEi7ucZpPnRGlomftWRNENz0TV1mMOI7MiA)
* 実際のAPI使用の際に認証Access Keyと認証Secret Keyを使って認証パラメータ('oauth_'をprefixとして使用するパラメータ)を作成し、requestに追加しますが、URL検証機能を利用してその情報の構成の例を確認できます。

サービスサーバに適用されるURLとパラメータ関連の内容は次の節で説明します。

OAuth認証クライアントの具現

NAVERクラウドプラットフォームAPIを使用するためには次の表に明示されたURLと必須パラメータを作成してリクエストしなければなりません。

区分 必要 因子の説明
呼び出しURL Y 呼び出し対象機能のURLで、形式はhttp://restapi.fs.ncloud.com/{機能リクエストURL}?{パラメータ}である。
例示) http://restapi.fs.ncloud.com/{test}?list...
認証パラメータ Y OAuth認証のためのパラメータであり、この情報はheaderに構成できます。
oauth_consumer_key
例示) oauth_consumer_key=xoiOTgN2sgjDb5oRzp8q
oauth_signature_method
例示) oauth_signature_method=HMAC-SHA1
oauth_version
例示) oauth_version=1.0
oauth_timestamp
例示) oauth_timestamp=1335419436
oauth_nonce
例示) oauth_nonce=W4SkWT
oauth_signature
例示) oauth_signature=qVsXa0Pf913BIhv55f06ont3aIE%3D

次の3種類に分類して説明します。

  • 認証パラメータの作成方法
  • 署名書(signature)の作成手順および例題(Java)
  • オープンライブラリを利用した認証パラメータの作成

認証パラメータの作成方法

NAVERクラウドプラットフォームAPIは標準OAuthをサポートするため、様々なオープンClient Libraryを使って認証パラメータを作成できます。
作成された認証パラメータは前の節のURLの例示のようにHTTP Requestにパラメータで追加したりヘッダに追加して使用できます。

区分 説明
oauth_consumer_key マイページ > API認証キー管理で作成したAccess Keyの値
例示) oauth_consumer_key=xoiOTgN2sgjDb5oRzp8q
oauth_signature_method OAuth署名方式。固定の値であり、HMAC-SHA1を使用します。
例示) oauth_signature_method=HMAC-SHA1
oauth_version OAuthのバージョン。固定の値であり、1.0を使用します。
例示) oauth_version=1.0
oauth_timestamp timestampの値。オープンライブラリを使用でき、使用の例題は"オープンライブラリを利用した認証パラメータの作成“をご参考ください。
例示) oauth_timestamp=1335419436
oauth_nonce 再転送攻撃(replay attack)に対する予防として再利用を防止するための一回性のパラメータです。オープンライブラリを使用でき、使用の例題は"オープンライブラリを利用した認証パラメータの作成“をご参考ください。
例示) oauth_nonce=W4SkWT
oauth_signature マイページ > API認証キー管理で作成したSecret Keyを使った署名です。(一回性) oauth_consumer_keyとペアになっているSecret Keyでなければなりません。
オープンライブラリを使用でき、使用の例題は"オープンライブラリを利用した認証パラメータの作成"をご参考ください。
例示) oauth_signature=qVsXa0Pf913BIhv55f06ont3aIE%3D

署名書(signature)の作成手順および例題(Java)

署名書(signature)作成のための手順を説明します。

  • baseStringの作成
  • signatureの作成
  • リクエストURLの作成(queryString方式またはAuthorization Header方式)

baseStringの作成

  1. リクエストパラメータにbaseStringの作成に必要なパラメータを追加します。
  2. リクエストパラメータとvalueの値をアルファベット順に整列します。
  3. baseString = RequestMethod + '&' + oauthEncode(requestUrl) + '&' + oauthEncode(queryString)

javaの例題)

  • リクエストパラメータにbaseStringの作成に必要なパラメータを追加します。
  • リクエストパラメータとvalueの値をアルファベット順に整列します。
  • パラメータを入れる部分にはAPIから送られるパラメータが存在する場合にのみ入れます。

  • 例題のコードでユーザーが値を変更しなければならない部分は次の通りです。

    • String consumerKey = "consumer-k1";
    • String consumerSecret = "consumer-secret1";
    • String requestUrl = " http://restapi.fs.ncloud.com/container/resource ";
    • String requestMethod = "GET";
    • requestParameters.put("list", null);
    • requestParameters.put("test_param1", Arrays.asList("a"));
    • requestParameters.put("test_param2", Arrays.asList("b2", "b1"));
    • requestParameters.put("test_param3", Arrays.asList("ハングル"));
    /**
     * signature base stringを作成するためのsignificantParameter設定
     * @param requestParameters
     * @param consumerKey
     * @return
     */
    private SortedMap<String, SortedSet<String>> getSignificantParametersForSignaturBaseString(Map<String, List<String>> requestParameters, String consumerKey) {
        SortedMap<String, SortedSet<String>> significantParameters = convertTypeToSortedMap(requestParameters);

        SortedSet<String> consumerKeySet = new TreeSet<String>();
        consumerKeySet.add(consumerKey);
        significantParameters.put("oauth_consumer_key", consumerKeySet);

        SortedSet<String> nonceSet = new TreeSet<String>();
        nonceSet.add(generateNonce());
        significantParameters.put("oauth_nonce", nonceSet);

        SortedSet<String> signatureMethodSet = new TreeSet<String>();
        signatureMethodSet.add("HMAC-SHA1");
        significantParameters.put("oauth_signature_method", signatureMethodSet);

        SortedSet<String> timestampSet = new TreeSet<String>();
        timestampSet.add(generateTimestamp());
        significantParameters.put("oauth_timestamp", timestampSet);

        SortedSet<String> versionSet = new TreeSet<String>();
        versionSet.add("1.0");
        significantParameters.put("oauth_version", versionSet);

        System.out.println("significantParameters : " + significantParameters);

        return significantParameters;
    }

    /**
     *
     * @param requestParameters
     * @return
     */
    private SortedMap<String, SortedSet<String>> convertTypeToSortedMap(Map<String, List<String>> requestParameters) {
        SortedMap<String, SortedSet<String>> significantParameters = new TreeMap<String, SortedSet<String>>();

        Iterator<String> parameterNames = requestParameters.keySet().iterator();
        while (parameterNames.hasNext()) {
            String parameterName = parameterNames.next();

            if (requestParameters.get(parameterName) == null || requestParameters.get(parameterName).size() == 0) {
                SortedSet<String> significantValues = new TreeSet<String>();
                significantValues.add("");
                significantParameters.put(parameterName, significantValues);
            } else {
                for (String parameterValue : requestParameters.get(parameterName)) {
                    if (parameterValue == null) {
                        parameterValue = "";
                    }

                    SortedSet<String> significantValues = significantParameters.get(parameterName);
                    if (significantValues == null) {
                        significantValues = new TreeSet<String>();
                        significantParameters.put(parameterName, significantValues);
                    }
                    significantValues.add(parameterValue);
                }
            }
        }
        return significantParameters;
    }

    private String generateTimestamp() {
        return Long.toString(System.currentTimeMillis() / 1000L);
    }

    private String generateNonce() {
        return Long.toString((new Random()).nextLong());
    }

a. baseString = RequestMethod + '&' + oauthEncode(requestUrl) + '&' + oauthEncode(queryString)

    /**
     * signature base stringを作成するためのquery stringの作成
     * @param significantParameters
     * @return
     */
    private StringBuilder getQueryStringForBaseString(SortedMap<String, SortedSet<String>> significantParameters) {
        StringBuilder queryString = new StringBuilder();
        Iterator<Map.Entry<String, SortedSet<String>>> paramIt = significantParameters.entrySet().iterator();
        while (paramIt.hasNext()) {
            Map.Entry<String, SortedSet<String>> sortedParameter = paramIt.next();
            Iterator<String> valueIt = sortedParameter.getValue().iterator();
            while (valueIt.hasNext()) {
                String parameterValue = valueIt.next();
                queryString.append(OAuthCodec.oauthEncode(sortedParameter.getKey())).append('=').append(OAuthCodec.oauthEncode(parameterValue));
                if (paramIt.hasNext() || valueIt.hasNext()) {
                    queryString.append('&');
                }
            }
        }
        return queryString;
    }

    /**
     * signature base stringの作成
     * @param requestMethod
     * @param requestUrl
     * @param significantParameters
     * @return
     */
    private String makeSignatureBaseString(String requestMethod, String requestUrl, SortedMap<String, SortedSet<String>> significantParameters) {
        StringBuilder queryString = getQueryStringForBaseString(significantParameters);

        requestUrl = normalizeUrl(requestUrl);
        requestUrl = OAuthCodec.oauthEncode(requestUrl);

        return new StringBuilder(requestMethod.toUpperCase()).append('&').append(requestUrl).append('&').append(OAuthCodec.oauthEncode(queryString.toString())).toString();
    }

    /**
     * @param url
     * @return
     */
    private String normalizeUrl(String url) {
        try {
            URL requestURL = new URL(url);
            StringBuilder normalized = new StringBuilder(requestURL.getProtocol().toLowerCase()).append("://").append(requestURL.getHost().toLowerCase());
            if ((requestURL.getPort() >= 0) && (requestURL.getPort() != requestURL.getDefaultPort())) {
                normalized.append(":").append(requestURL.getPort());
            }
            normalized.append(requestURL.getPath());
            return normalized.toString();
        } catch (MalformedURLException e) {
            throw new IllegalStateException("Illegal URL for calculating the OAuth signature.", e);
        }
    }

    class OAuthCodec extends URLCodec {

        private OAuthCodec() {
        }

        public static String oauthEncode(String value) {
            if (value == null)
                return "";
            try {
                return new String(URLCodec.encodeUrl(SAFE_CHARACTERS, value.getBytes("UTF-8")), "US-ASCII");
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
        }

        public static String oauthDecode(String value) throws DecoderException {
            if (value == null)
                return "";
            try {
                return new String(URLCodec.decodeUrl(value.getBytes("US-ASCII")), "UTF-8");
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
        }

        protected static final BitSet SAFE_CHARACTERS;

        static {
            SAFE_CHARACTERS = (BitSet)URLCodec.WWW_FORM_URL.clone();
            SAFE_CHARACTERS.clear(42);
            SAFE_CHARACTERS.clear(32);
            SAFE_CHARACTERS.set(126);
        }
    }

signatureの作成

Secret Keyと上で作成したbaseStringを使ってHMAC SHA-1ハッシュアルゴリズムを利用し、署名書を作成します。

javaの例題)

    /**
     * base stringとconsumer secret keyを使ってsignatureを作成
     * @param signatureBaseString
     * @param consumerSecret
     * @return
     * @throws NoSuchAlgorithmException
     * @throws UnsupportedEncodingException
     * @throws InvalidKeyException
     */
    private String sign(String signatureBaseString, String consumerSecret) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
        Mac mac = Mac.getInstance("HmacSHA1");
        SecretKeySpec spec = new SecretKeySpec(new String(consumerSecret + "&").getBytes("UTF-8"), "HmacSHA1");
        mac.init(spec);
        byte text[] = signatureBaseString.getBytes("UTF-8");
        byte signatureBytes[] = mac.doFinal(text);
        signatureBytes = Base64.encodeBase64(signatureBytes);
        String signature = new String(signatureBytes, "UTF-8");
        System.out.println("signature : " + signature);
        return signature;
    }

リクエストURLの作成(queryString方式またはAuthorization Header方式)

javaの例題)

  • queryString方式
    /**
     * request URL作成のためのquery stringの作成
     * @param significantParameters
     * @return
     */
    private StringBuilder getQueryStringForRequest(SortedMap<String, SortedSet<String>> significantParameters) {
        StringBuilder queryString = new StringBuilder();
        Iterator<Map.Entry<String, SortedSet<String>>> paramIt = significantParameters.entrySet().iterator();
        while (paramIt.hasNext()) {
            Map.Entry<String, SortedSet<String>> sortedParameter = paramIt.next();
            Iterator<String> valueIt = sortedParameter.getValue().iterator();
            while (valueIt.hasNext()) {
                String parameterValue = valueIt.next();
                if (StringUtils.isEmpty(parameterValue)) {
                    queryString.append(OAuthCodec.oauthEncode(sortedParameter.getKey()));
                } else {
                    queryString.append(OAuthCodec.oauthEncode(sortedParameter.getKey())).append('=').append(OAuthCodec.oauthEncode(parameterValue));
                }

                if (paramIt.hasNext() || valueIt.hasNext()) {
                    queryString.append('&');
                }
            }
        }
        return queryString;
    }

    /**
     * request URLの作成
     * @param requestUrl
     * @param significantParameters
     * @param signature
     * @return
     * @throws UnsupportedEncodingException
     */
    private String makeRequestUrl(String requestUrl, SortedMap<String, SortedSet<String>> significantParameters, String signature) throws UnsupportedEncodingException {
        StringBuilder queryString = getQueryStringForRequest(significantParameters);
        queryString.append('&').append("oauth_signature").append("=").append(URLEncoder.encode(signature, "UTF-8"));
        return new StringBuffer(requestUrl).append("?").append(queryString.toString()).toString();
    }

    /**
     * queryString方式のリクエスト実行
     * @throws IOException
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeyException
     */
    public void request() throws IOException, NoSuchAlgorithmException, InvalidKeyException {

        String consumerKey = "consumer-k1";
        String consumerSecret = "consumer-secret1";
        String requestUrl = " http://restapi.fs.ncloud.com/container/resource";
        String requestMethod = "GET";
        Map<String, List<String>> requestParameters = new HashMap<String, List<String>>();
        requestParameters.put("list", null);
        requestParameters.put("test_param1", Arrays.asList("a"));
        requestParameters.put("test_param2", Arrays.asList("b2", "b1"));
        requestParameters.put("test_param3", Arrays.asList("ハングル"));

        SortedMap<String, SortedSet<String>> significantParameters = getSignificantParametersForSignaturBaseString(requestParameters, consumerKey);
        String baseString = makeSignatureBaseString(requestMethod, requestUrl, significantParameters);
        String signature = sign(baseString, consumerSecret);
        String signedUrl = makeRequestUrl(requestUrl, significantParameters, signature);
        System.out.println("signedUrl : " + signedUrl);

        URL obj = new URL(signedUrl);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod(requestMethod);

        int responseCode = con.getResponseCode();
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        System.out.println(response.toString());
    }
  • Authorization Header方式
    /**
     * @param significantParameters
     * @param signature
     * @return
     * @throws UnsupportedEncodingException
     */
    private String makeAuthorizationHeader(SortedMap<String, SortedSet<String>> significantParameters, String signature) throws UnsupportedEncodingException {
        StringBuilder authorizationHeaderString = new StringBuilder();

        Iterator<Map.Entry<String, SortedSet<String>>> paramIt = significantParameters.entrySet().iterator();
        while (paramIt.hasNext()) {
            Map.Entry<String, SortedSet<String>> sortedParameter = paramIt.next();
            int valueSize = sortedParameter.getValue().size();
            Iterator<String> valueIt = sortedParameter.getValue().iterator();

            if ("oauth_consumer_key".equals(sortedParameter.getKey())) {
                if (valueSize != 1) {
                    throw new IllegalArgumentException("oauth_consumer_key is empty or one more value.");
                }
                authorizationHeaderString.append("oauth_consumer_key").append('=').append('\"').append(valueIt.next()).append('\"');
                authorizationHeaderString.append(", ");
            }

            if ("oauth_nonce".equals(sortedParameter.getKey())) {
                if (valueSize != 1) {
                    throw new IllegalArgumentException("oauth_nonce is empty or one more value.");
                }
                authorizationHeaderString.append("oauth_nonce").append('=').append('\"').append(valueIt.next()).append('\"');
                authorizationHeaderString.append(", ");
            }

            if ("oauth_signature_method".equals(sortedParameter.getKey())) {
                if (valueSize != 1) {
                    throw new IllegalArgumentException("oauth_signature_method is empty or one more value.");
                }
                authorizationHeaderString.append("oauth_signature_method").append('=').append('\"').append(valueIt.next()).append('\"');
                authorizationHeaderString.append(", ");
            }

            if ("oauth_timestamp".equals(sortedParameter.getKey())) {
                if (valueSize != 1) {
                    throw new IllegalArgumentException("oauth_timestamp is empty or one more value.");
                }
                authorizationHeaderString.append("oauth_timestamp").append('=').append('\"').append(valueIt.next()).append('\"');
                authorizationHeaderString.append(", ");
            }

            if ("oauth_version".equals(sortedParameter.getKey())) {
                if (valueSize != 1) {
                    throw new IllegalArgumentException("oauth_version is empty or one more value.");
                }
                authorizationHeaderString.append("oauth_version").append('=').append('\"').append(valueIt.next()).append('\"');
                authorizationHeaderString.append(", ");
            }
        }

        return new StringBuffer().append("OAuth ").append(authorizationHeaderString.toString()).append("oauth_signature").append('=').append('\"').append(URLEncoder.encode(signature, "UTF-8")).append('\"').toString();
    }

    /**
     * Authorization Header方式のリクエスト実行
     * @throws IOException
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeyException
     */
    public void request2() throws IOException, NoSuchAlgorithmException, InvalidKeyException {
        String consumerKey = "consumer-k1";
        String consumerSecret = "consumer-secret1";
        String requestUrl = " http://restapi.fs.ncloud.com/container/resource";
        String requestMethod = "GET";
        Map<String, List<String>> requestParameters = new HashMap<String, List<String>>();
        requestParameters.put("list", null);
        requestParameters.put("test_param1", Arrays.asList("a"));
        requestParameters.put("test_param2", Arrays.asList("b2", "b1"));
        requestParameters.put("test_param3", Arrays.asList("ハングル"));

        SortedMap<String, SortedSet<String>> significantParameters = getSignificantParametersForSignaturBaseString(requestParameters, consumerKey);
        String baseString = makeSignatureBaseString(requestMethod, requestUrl, significantParameters);
        String signature = sign(baseString, consumerSecret);

        StringBuilder queryString = getQueryStringForRequest(convertTypeToSortedMap(requestParameters));
        requestUrl += "?" + queryString.toString();
        System.out.println("requestUrl : " + requestUrl);

        String authorizationHeaderValue = makeAuthorizationHeader(significantParameters, signature);
        System.out.println("authorizationHeaderValue : " + authorizationHeaderValue);

        URL obj = new URL(requestUrl);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod(requestMethod);
        con.setRequestProperty("Authorization", authorizationHeaderValue);

        int responseCode = con.getResponseCode();
        System.out.println("response Code : " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        System.out.println(response.toString());
    }

オープンライブラリを利用した認証パラメータの作成

認証パラメータを作成する際、オープンライブラリを活用できます。
この例題ではsignpost-coreライブラリを使用します。
このライブラリを使用すると、ヘッダに認証パラメータが付いて送られます。

signpost-coreライブラリを直接ダウンロードしたり、Mavenを使用する場合はpom.xmlに次のように設定します。

<dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-core</artifactId>
   <version>1.2</version>
   <scope>compile</scope>
</dependency>

次の例題のコードを参考にし、OAuth認証パラメータを含むHTTPリクエストを作成します。

  • 例題のコードでユーザーが値を変更しなければならない部分は次の通りです。
    • String consumerKey = "consumer-k1";
    • String consumerSecret = "consumer-secret1";
    • String requestUrl = " http://restapi.fs.ncloud.com/container/resource";
    • String requestMethod = "GET";
    • requestParameters.put("list", null);
    • requestParameters.put("test_param1", "a");
    • requestParameters.put("test_param2", Arrays.asList("b2", "b1"));
    /**
     * ライブラリリクエスト実行
     * @throws IOException
     * @throws OAuthMessageSignerException
     * @throws OAuthExpectationFailedException
     * @throws OAuthCommunicationException
     */
    public void request() throws IOException, OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException {

        String consumerKey = "consumer-k1";
        String consumerSecret = "consumer-secret1";
        String requestUrl = " http://restapi.fs.ncloud.com/container/resource";
        String requestMethod = "GET";

        Map<String, Object> requestParameters = new HashMap<String, Object>();
        requestParameters.put("list", null);
        requestParameters.put("test_param1", "a");
        requestParameters.put("test_param2", Arrays.asList("b2", "b1"));

        StringBuffer queryString = new StringBuffer();
        int index= 1;
        int requestParamSize = requestParameters.size();
        for (String key : requestParameters.keySet()) {
            if (index == 1) {
                queryString.append("?");
            }
            queryString.append(key);

            if (requestParameters.get(key) != null) {
                queryString.append('=');
                queryString.append(URLEncoder.encode(requestParameters.get(key).toString(), "UTF-8"));
            }
            if (index!= requestParamSize) {
                queryString.append("&");
                index ++;
            }
        }

        OAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret);

        URL url = new URL(requestUrl + queryString.toString());
        HttpURLConnection con = (HttpURLConnection)url.openConnection();

        con.setRequestMethod(requestMethod);
        con.setConnectTimeout(500000);
        con.setUseCaches(false);
        con.setDefaultUseCaches(false);

        consumer.sign(con);

        con.connect();

        int responseCode = con.getResponseCode();
        System.out.println("ResponseCode : " + responseCode);

        if (responseCode == HttpURLConnection.HTTP_OK) {
            BufferedReader resultReader = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
            StringBuffer requestResult = new StringBuffer();
            String readString = null;
            while ((readString = resultReader.readLine()) != null) {
                requestResult.append(readString);
            }

            System.out.println(requestResult.toString());
        }
    }

付録. 略語/用語

略語のまとめ

OAuth     Open standard for Authorization

HMAC     Hash-based Message Authentication Code

SHA     Secure Hash Algorithm

関連情報のご確認

次のガイドで関連情報を確認できます。

に対する検索結果は~件です。 ""

    に対する検索結果がありません。 ""

    処理中...