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

みんさん、こんにちは!
今回は、プレミアムプランを契約していただいているお客さま向けに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 の例です。
プレミアムプランのときは、少し異なります。以下を参照してください。
「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 APIs の無償版(スタンダードプラン)の利用制限に・・・
2017.03.13
期末特価!今だけGoogle Maps APIs を特別価格でご提供
みなさん、こんにちは!
今日は、Google Maps APIs の期間限定キャンペーンのご案内になります。
・・・
-
最新記事New Posts
-
人気記事Popular Posts
-
関連タグRelated Tags
-
アーカイブArchive