MULTISOUP

MULTISOUP

MULTISOUP

Staff Blog

Introduction example

2016.07.13

[プレミアム向け] WebサービスAPIの認証方法

20160713

みんさん、こんにちは!

今回は、プレミアムプランを契約していただいているお客さま向けにWebサービスAPIの認証方法をご紹介します!

該当となるサービスは、以下になります。

 

  • Static Maps API
  • StreeView Image API
  • Geocoding API
  • Directions API
  • DistanceMatrix API
  • TimeZone API
  • Elevation API

 

通常スタンダードプラン(無償版)を使用するときは、Google Developer Console にてAPIキーを取得し、パラメータに「key=xxxxxxxx」を付加することで利用が可能となります。

以下は、Google Static Maps API の例です。

https://maps.googleapis.com/maps/api/staticmap?center=tokyo&size=640×640&key=xxxxxxxxxxxxxxxxxx

プレミアムプランのときは、少し異なります。以下を参照してください。

https://maps.googleapis.com/maps/api/staticmap?center=tokyo&size=640×640&client=gme-xxxxx&signature=9Sh22O29WOEJnQv-Ii-50Gjh5bc=

「key」 の代わりに、「client」 と 「signature」 というパラメータがありますね。

 

client: プレミアム契約時に指定された「Client Id」 (gme=xxxxxxxx)

signature: プラミアム契約時に指定された「Crypto Key」を使用し、生成する必要があります。

 

では、signature の生成方法を説明します。JAVA(JDK1.8)のソースです。

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.MalformedURLException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;  // JDK1.8 only 
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public static String signRequest(String clientId, String cryptoKey, String urlPath) 
    throws NoSuchAlgorithmException,InvalidKeyException, 
    UnsupportedEncodingException, URISyntaxException, MalformedURLException {

    // URL に client を追加
    urlPath = urlPath + "&client=" + clientId;

    cryptoKey = cryptoKey.replace('-', '+');
    cryptoKey = cryptoKey.replace('_', '/');
    byte[] key = Base64.getDecoder().decode(cryptoKey); // JDK1.8 only

    URL url = new URL(urlPath);
    String resource = url.getPath() + '?' + url.getQuery();
    SecretKeySpec sha1Key = new SecretKeySpec(key, "HmacSHA1");
    Mac mac = Mac.getInstance("HmacSHA1");
    mac.init(sha1Key);

    byte[] sigBytes = mac.doFinal(resource.getBytes());
    String signature = Base64.getEncoder().encodeToString(sigBytes); //JDK1.8 only

    signature = signature.replace('+', '-');
    signature = signature.replace('/', '_');

    // url に signature を追加して返却
    return urlPath + "&signature=" + signature;
}

実際、関数を呼ぶときは以下のとおりです。

// HTTPリクエストするURL
String url = "https://maps.googleapis.com/maps/api/staticmap?center=tokyo&size=1000x1000"; 

// ClientId, CryptoKey, url を渡して、signature 付きURLを生成
String signatureUrl = signRequest("gme-xxxxx", "xxxxxxxxxxxxxxxxxxxxx", url); 

// 上記で作成した signatureUrl を使用してHTTPリクエストする
:

※ PHP、C#、Phython でも同様のことは可能です。

※ 上記は、Static Maps API の例ですが、他のAPIでもURLが異なるだけで同様の処理となります。

 

いかがでしたか?

通常であれば、リクエストするパラメータはその都度変わるはずですので、毎回動的に生成する必要がありますね。最初は理解するのに苦しみましたが、一度慣れてしまえば簡単なことです!

実際利用したカウントは、プレミアムユーザ向け サポートポータルサイト にてご確認頂けます。(反映されるまで2日程かかりますが・・・)

 

マルティスープでは、Google Maps についてのご質問を随時受け付けています!

【関連記事】こんな記事も読まれています

2016.04.04

有償版 Google Maps APIのClient IDを実装しよう!


Google Maps for Work プレミアプラン あるいは、これまでの有償版 Google Maps APIs を購入し、利用し・・・

続きを読む

2017.03.13

期末特価!今だけGoogle Maps APIs を特別価格でご提供

みなさん、こんにちは!
今日は、Google Maps APIs の期間限定キャンペーンのご案内になります。

 

・・・

続きを読む

2017.03.09

Google Maps 無償・有償 プラン診断

みなさん、こんにちは!

今日は、みなさんから質問の多いGoogle Maps APIsのプランについて、どっち(スタンダードプランorプレミア・・・

続きを読む

 - Google Maps Directions API, Google Maps DistanceMatrix API, Google Maps Elevation API, Google Maps Geolocation API, Google Maps TimeZone API, Google StaticMaps API, Google StreetView Image API, サポート, スタッフ日記, プレミアムプラン