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

地図や位置情報を用いたシステムのご提案・開発ならマルティスープへ

マルティスープは、創業以来のGISとモバイル開発の実績と技術力で、営業支援システムやリサーチ・公共インフラ・工事・警備業界の現場を支援するシステム開発など、地図や位置情報を使った業務システムの導入のご提案や開発をいたします。

現場をつなぐコミュニケーションが屋内外業務のパフォーマンスを最大限に。マルティスープのiField(アイ・フィールド)®シリーズは、屋内外業務の現場の実力を減少させるコミュニケーション障壁を除き、使い慣れたスマートデバイスを使って 現場の実力をリアルに伝えるサービス。

位置・空間情報のエキスパート集団として一緒に働きませんか?

マルティスープは地図情報をはじめとする位置・空間情報技術のエキスパート集団です。当社で日々研究している地図や位置情報といった技術は、災害支援など貢献度の高いシステムとして使用されることもあれば、スマートフォンアプリのゲームとして使われることもあり、その利用用途・価値は、今後もますます広がっていっています。
私たちの企業理念は、「創る喜び、使う喜び」です。
今後の開発体制をより強化するために、新卒・中途問わず、当社の未来を共に創っていただける新メンバーを募集します!

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

2017.02.23

Google Maps APIs 有償版と無償版の機能的な違い

みなさん、こんにちは!

今日は、Google Maps API の無償版(スタンダード)と有償版(プレミアム)の機能的な違いをご紹介したいと思・・・

続きを読む

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