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 についてのご質問を随時受け付けています!

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

2017.04.13

5/11(木) Google Maps 活用セミナーを開催します!

みなさん、こんにちは!

5/11(木) 13:30より、六本木ヒルズにて、Google Maps に関するセミナーをグーグル合同会社協同で・・・

続きを読む

2017.02.07

Google Maps 無償版の利用制限について

みなさん、こんにちは:)

今日は、お客さまからの問い合わせが多い Google Maps APIs の無償版(スタンダードプラン)の利用制限に・・・

続きを読む

2017.03.13

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

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

 

・・・

続きを読む

 - 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, サポート, スタッフ日記, プレミアムプラン

お問い合わせお見積もりから開発のご相談まで、お気軽にお問い合わせください。

Google Maps for Work™に関するご質問やお見積りは、
マルティスープまでお気軽にお問い合わせください03-3518-9013 (受付時間:平日 9:00−18:00)