Catatan: Premium Plan Google Maps Platform tidak lagi tersedia untuk pendaftar atau pelanggan baru.
Memilih metode autentikasi
Untuk menggunakan Google Maps Platform, Anda harus mengautentikasi permintaan menggunakan salah satu dari kunci API dan tanda tangan digital ATAU client ID dan tanda tangan digital. Untuk meminimalkan penggunaan client ID dalam kode Anda, gunakan kunci API dan tanda tangan digital jika memungkinkan.
Metode autentikasi yang Anda pilih didasarkan pada lisensi Anda:
- Pelanggan dengan Premium Plan dapat menggunakan kunci API dan tanda tangan digital ATAU client ID dan tanda tangan digital.
- Pelanggan dengan lisensi sebelumnya harus menggunakan client ID dan tanda tangan digital.
Saat memutuskan metode autentikasi yang akan digunakan, pertimbangkan hal-hal berikut ini:
- Kunci API (Premium Plan) (pilihan) — Dengan menggunakan kunci API untuk
mengautentikasi permintaan, Anda dapat:
- Mengelola semua API Anda di halaman API pada Google Cloud Console.
- Mengakses data penggunaan real-time dan data penggunaan historis 30 hari di Cloud Console.
- Menambahkan parameter
channel
ke permintaan sehingga Anda dapat melihat laporan penggunaan yang lebih detail. - Melihat laporan penggunaan berisi data lebih dari 30 hari di Google Cloud Console.
- Membatasi kunci API Anda untuk mencegah penyalahgunaan.
- Client ID (Premium Plan atau lisensi sebelumnya) — Dengan menggunakan
client ID untuk mengautentikasi permintaan, Anda dapat:
- Menambahkan parameter
channel
ke permintaan sehingga Anda dapat melihat laporan penggunaan yang lebih detail. - Melihat laporan penggunaan berisi data lebih dari 30 hari di Google Cloud Console.
- Menggunakan alat Maps Analytics untuk Maps JavaScript API.
- Menambahkan parameter
Autentikasi menggunakan kunci API dan tanda tangan digital
Membuat kunci API
Anda harus memiliki setidaknya satu kunci API yang dikaitkan dengan project Anda.
Cara mendapatkan kunci API:
- Buka Cloud Console.
- Buka drop-down project dan pilih project yang dibuat untuk Anda saat membeli
Premium Plan. Nama project diawali dengan
Google Maps API for Business atau Google Maps for Work atau Google Maps.
- Klik tombol menu dan pilih Google Maps Platform > Kredensial.
-
Pada halaman Kredensial, klik Buat kredensial > Kunci API.
Dialog Kunci API dibuat akan menampilkan kunci API yang baru dibuat (string yang dienkripsi). -
Klik Tutup.
Kunci API baru dicantumkan pada halaman Kredensial di bagian Kunci API.
Catatan:
Untuk mendapatkan akses penuh ke fitur yang terdapat dalam paket, pelanggan Premium harus
menggunakan project yang dikaitkan dengan akun Premium mereka. Saat membeli
lisensi, Anda menerima nama aset Premium Anda dalam format berikut:
gme-[company] > proj-[number] ([type])
.
Untuk memastikan Anda mengakses project yang benar, login ke konsol sebagai
pemilik project menggunakan console.cloud.google.com/project/number
(ganti number
dengan nomor project Anda).
Anda dapat menemukan pemilik project di email selamat datang.
Menambahkan kunci API ke permintaan
Anda harus menyertakan kunci API dengan setiap permintaan Google Maps Platform. Pada contoh berikut, ganti YOUR_API_KEY
dengan kunci API Anda.
https://maps.googleapis.com/maps/api/staticmap?center=40.714%2c%20-73.998&zoom=12&size=400x400&key=YOUR_API_KEY
HTTPS diperlukan untuk permintaan yang menggunakan kunci API, dan direkomendasikan untuk permintaan yang menggunakan client ID. HTTPS juga diperlukan untuk aplikasi yang menyertakan data pengguna sensitif - seperti lokasi pengguna - dalam permintaan.
Membatasi kunci API
Membatasi kunci API akan meningkatkan keamanan aplikasi Anda dengan memastikan hanya permintaan sah yang dibuat dengan kunci API Anda. Sebaiknya Anda mengikuti petunjuk untuk menetapkan pembatasan pada kunci API Anda. Untuk informasi selengkapnya, lihat Praktik terbaik keamanan API.
Cara membatasi kunci API:
-
Buka halaman Google Maps Platform > Kredensial.
- Pilih kunci API yang ingin Anda batasi. Halaman properti kunci API akan muncul.
- Di bagian Pembatasan kunci, tetapkan pembatasan berikut:
- Pembatasan aplikasi:
- Untuk menerima permintaan dari daftar situs yang Anda berikan, pilih Perujuk HTTP (situs web) dari daftar Pembatasan aplikasi.
- Tentukan satu atau beberapa situs web perujuk. Misalnya,
*.google.com
menerima semua situs yang diakhiri dengangoogle.com
, sepertihttps://developers.google.com
.
Catatan: Perujuk file:// memerlukan representasi khusus untuk ditambahkan ke pembatasan kunci. Bagian "file://" harus diganti dengan "__file_url__" sebelum ditambahkan ke pembatasan kunci. Misalnya, "file:///path/to/" harus diformat sebagai "__file_url__//path/to/*". Setelah mengaktifkan perujuk file://, sebaiknya periksa penggunaan Anda secara teratur untuk memastikan kecocokannya dengan ekspektasi Anda.
- Pembatasan API:
- Klik Batasi kunci.
- Pilih Google Maps Platform dari dropdown Pilih API. Jika Google Maps Platform tidak tercantum, Anda perlu mengaktifkannya.
- Untuk menyelesaikan perubahan, klik Simpan.
Membuat tanda tangan digital
Permintaan ke Google Maps Platform yang menggunakan parameter key
, yang berisi kunci API,
juga harus menyertakan parameter signature
, yang berisi tanda tangan digital yang
harus Anda buat menggunakan rahasia penandatanganan URL bersama. Rahasia bersama Anda tersedia di Google Cloud Console.
Proses penandatanganan menggunakan algoritme enkripsi untuk menggabungkan URL dan rahasia bersama Anda. Tanda tangan unik yang dihasilkan memungkinkan server kami untuk memverifikasi bahwa situs yang membuat permintaan dengan menggunakan kunci API Anda telah diberi otorisasi untuk melakukannya.
Pembuatan tanda tangan digital adalah suatu proses dua-langkah:
- Langkah 1 Mendapatkan rahasia penandatanganan URL - tersedia di Cloud Console.
- Langkah 2: Membuat tanda tangan digital - menggunakan rahasia penandatanganan URL.
Langkah 1: Mendapatkan rahasia penandatanganan URL Anda
Rahasia penandatanganan URL kriptografi Anda tersedia di Cloud Console. Rahasia ini, juga dikenal sebagai kunci pribadi, dienkode dalam Base64 yang dimodifikasi untuk URL. Rahasia ini dibagi antara Anda dan Google, serta bersifat unik untuk kunci API Anda. Harap menjaga kerahasiaan penandatanganan URL Anda. Jangan meneruskan permintaan apa pun padanya, menyimpannya di situs apa pun, atau mempostingnya ke forum publik. Semua orang yang mendapatkan rahasia penandatanganan URL ini dapat memalsukan permintaan dengan menggunakan identitas Anda.
Dapatkan rahasia penandatanganan URL di halaman ini pada Cloud Console. Penting: Pilih project yang dibuat untuk Anda saat membeli Premium Plan.
Atau ikuti langkah-langkah ini untuk melihat rahasia penandatanganan URL Anda:
- Buka Cloud Console.
- Klik drop-down project dan pilih project yang dibuat untuk Anda saat membeli
Premium Plan. Nama project diawali dengan
Google Maps API for Business atau Google Maps for Work atau Google Maps.
- Dari daftar API di halaman Dasbor, klik nama Google Maps Platform. Detail API akan ditampilkan, dengan tab Ringkasan terbuka.
- Klik tab Rahasia penandatanganan URL.
Untuk mendapatkan rahasia penandatanganan URL baru, klik Buat kembali rahasia. Masa berlaku rahasia sebelumnya akan berakhir 24 jam setelah Anda membuat yang baru. Setelah 24 jam berlalu, permintaan yang berisi rahasia lama tidak akan berfungsi lagi.
Langkah 2: Membuat tanda tangan digital
Agar dapat membuat tanda tangan digital untuk permintaan Anda, lihat Membuat tanda tangan digital dengan kunci API.
Autentikasi menggunakan client ID dan tanda tangan digital
Memahami client ID dan kunci kriptografis Anda
Setelah membeli lisensi Premium Plan Google Maps Platform, Anda akan menerima email selamat datang dari Google yang berisi client ID dan kunci kriptografis pribadi Anda.
-
Client ID Anda digunakan untuk mengakses fitur khusus dari Premium Plan Google Maps Platform. Pada contoh di bawah, ganti
YOUR_CLIENT_ID
dengan client ID yang Anda dapatkan di email selamat datang. Semua client ID diawali dengan gme-. -
Kunci kriptografis pribadi Anda digunakan untuk membuat tanda tangan digital yang unik. Pada contoh kode di bawah, ganti
SIGNATURE
dengan tanda tangan digital unik Anda. Untuk informasi selengkapnya, lihat Membuat tanda tangan digital dengan client ID.
<img src="https://maps.googleapis.com/maps/api/staticmap ?center=-15.800513,-47.91378 &zoom=11 &size=300x300 &client=YOUR_CLIENT_ID &signature=SIGNATURE">
Jika Anda kehilangan client ID atau kunci kriptografis pribadi, Anda dapat memulihkannya dengan login ke Google Cloud Console dan mengklik Maps: Kelola Client ID dari link di sebelah kiri halaman.
Parameter opsional untuk laporan
Saat menggunakan client ID untuk autentikasi API, parameter opsional berikut ini dapat digunakan:
channel
digunakan untuk memberikan detail pelaporan tambahan, dengan mengelompokkan saluran yang berbeda secara terpisah di laporan Anda. Lihat Ringkasan Pelaporan Premium Plan untuk mengetahui informasi lebih lanjut.
Membuat tanda tangan digital
Agar dapat membuat tanda tangan digital untuk permintaan Anda, lihat Membuat tanda tangan digital dengan client ID.
Tanda tangan digital
Cara kerja tanda tangan digital
Tanda tangan digital dibuat menggunakan rahasia penandatanganan URL kriptografis, yang tersedia di Google Cloud Console. Rahasia ini, juga dikenal sebagai kunci pribadi, dienkode dalam Base64 yang dimodifikasi untuk URL. Rahasia ini dibagi antara Anda dan Google, serta bersifat unik untuk kunci API Anda.
Proses penandatanganan menggunakan algoritme enkripsi untuk menggabungkan URL dan rahasia bersama Anda. Tanda tangan unik yang dihasilkan memungkinkan server kami untuk memverifikasi bahwa situs yang membuat permintaan dengan menggunakan kunci API Anda telah diberi otorisasi untuk melakukannya.
Anda dapat membuat tanda tangan digital menggunakan kunci API atau client ID.
Membuat tanda tangan digital dengan kunci API
Ikuti langkah-langkah berikut untuk membuat tanda tangan digital yang akan digunakan bersama kunci API:
Buat URL permintaan tanpa tanda tangan, dan pastikan Anda menyertakan kunci API dalam parameter
key
. Perhatikan bahwa Anda harus mengenkode semua karakter non-standar ke dalam URL. Contoh:https://maps.googleapis.com/maps/api/staticmap?center=40.714%2c%20-73.998&zoom=12&size=400x400&key=YOUR_API_KEY
Catatan: Semua layanan Google memerlukan encoding karakter UTF-8 (yang secara implisit juga menyertakan ASCII). Jika aplikasi Anda beroperasi menggunakan himpunan karakter lain, pastikan URL dibuat dengan menggunakan UTF-8 dan mengenkodenya ke URL dengan benar.
Hilangkan bagian domain dari permintaan, dengan menyisakan jalur dan kueri saja.
/maps/api/staticmap?center=40.714%2c%20-73.998&zoom=12&size=400x400&key=YOUR_API_KEY
Ambil rahasia penandatanganan URL Anda, yang dienkode dalam Base64 yang dimodifikasi untuk URL, dari Cloud Console dan tanda tangani URL di atas menggunakan algoritme HMAC-SHA1 (lihat Mendapatkan rahasia penandatanganan URL Anda).
Anda mungkin perlu mendekode rahasia Anda ke dalam format biner asalnya. Perlu diketahui bahwa tanda tangan yang dihasilkan di hampir semua library kriptografi akan memiliki format biner.
Catatan: Base64 yang dimodifikasi untuk URL akan mengganti karakter
+
dan/
dari Base64 standar dengan-
dan_
, sehingga tanda tangan Base64 tidak perlu lagi dienkode ke URL.Enkodekan tanda tangan biner yang dihasilkan menggunakan Base64 yang dimodifikasi untuk URL guna mengonversi tanda tangan ini menjadi sesuatu yang dapat diteruskan dalam URL.
Tambahkan tanda tangan yang dihasilkan ke URL permintaan dalam parameter
signature
. Contoh:https://maps.googleapis.com/maps/api/staticmap?center=40.714%2c%20-73.998&zoom=12&size=400x400&key=YOUR_API_KEY&signature=BASE64_SIGNATURE
Untuk contoh yang menunjukkan cara menerapkan penandatanganan URL menggunakan kode sisi server, lihat Kode contoh untuk penandatanganan URL.
Untuk menandatangani URL sekarang, masukkan URL dan rahasia penandatanganan URL Anda di bawah ini. URL tersebut harus memiliki format seperti yang dijelaskan di langkah 1 di atas, dan dienkode ke URL.
Membuat tanda tangan digital dengan client ID
Permintaan ke Static Maps API yang menggunakan parameter client
juga memerlukan signature
digital, yang dibuat menggunakan
kunci kriptografis pribadi yang diberikan kepada Anda dalam email selamat datang.
Proses penandatanganan menggabungkan URL dan kunci dengan menggunakan algoritme enkripsi. Tanda tangan unik yang dihasilkan memungkinkan server kami memverifikasi bahwa situs yang menghasilkan permintaan menggunakan client ID Anda telah diotorisasi untuk melakukannya. Tanda tangan tersebut juga bersifat unik untuk setiap URL, sehingga memastikan permintaan yang menggunakan client ID tidak bisa dimodifikasi tanpa mengharuskan pembuatan tanda tangan baru.
Kunci kriptografis pribadi Anda
Kunci penandatanganan URL kriptografis pribadi Anda akan dikeluarkan bersama client ID Anda dan merupakan "kunci bersama rahasia" antara Anda dan Google. Kunci penandatanganan ini hanya milik Anda dan bersifat unik untuk client ID Anda. Oleh karena itu, pastikan kunci penandatanganan Anda tetap aman. Kunci ini tidak boleh diteruskan dalam permintaan, disimpan di situs, atau diposting ke forum publik. Semua orang yang mendapatkan kunci penandatanganan ini dapat memalsukan permintaan dengan menggunakan identitas Anda.
Catatan: Kunci penandatanganan kriptografis pribadi ini tidak sama dengan kunci API yang dikeluarkan oleh Cloud Console.
Jika Anda kehilangan kunci kriptografis pribadi, login ke Cloud Console dan pilih Maps: Kelola Client ID untuk mendapatkannya.
Membuat tanda tangan digital dengan client ID
Mencoba mengakses Static Maps API dengan tanda tangan yang tidak valid akan
menyebabkan error HTTP 403
(Dilarang). Saat mengonversi aplikasi Anda
untuk menggunakan penandatanganan URL, pastikan Anda menguji tanda tangan Anda untuk memastikan
tanda tangan tersebut memulai permintaan yang valid. Anda harus menguji terlebih dulu apakah URL asal
memang valid serta menguji apakah Anda menghasilkan tanda tangan
yang benar.
Ikuti langkah-langkah ini untuk membuat tanda tangan digital bagi permintaan Anda:
-
Buat URL permintaan tanpa tanda tangan, pastikan untuk menyertakan parameter
client
. Perhatikan bahwa semua karakter non-standar perlu dienkodekan ke URL:https://maps.googleapis.com/maps/api/staticmap?center=40.714%2c%20-73.998&zoom=12&size=400x400&client=clientID
Catatan: Semua layanan Google memerlukan encoding karakter UTF-8 (yang secara implisit menyertakan ASCII). Jika aplikasi Anda beroperasi menggunakan himpunan karakter lain, pastikan URL dibuat dengan menggunakan UTF-8 dan mengenkodenya ke URL dengan benar.
-
Hilangkan bagian domain dari permintaan, dengan menyisakan jalur dan kueri saja:
/maps/api/staticmap?center=40.714%2c%20-73.998&zoom=12&size=400x400&client=clientID
-
Ambil kunci pribadi Anda, yang dienkode di Base64 yang dimodifikasi untuk URL, dan tanda tangani URL di atas menggunakan algoritme HMAC-SHA1. Anda mungkin perlu mendekode kunci ini ke dalam format biner asalnya. Perlu diketahui bahwa tanda tangan yang dihasilkan di hampir semua library kriptografi akan memiliki format biner.
Catatan: Base64 yang dimodifikasi untuk URL akan mengganti karakter
+
dan/
dari Base64 standar dengan-
dan_
, sehingga semua tanda tangan Base64 tidak perlu lagi dienkode ke URL. -
Enkodekan tanda tangan biner yang dihasilkan dengan menggunakan Base64 yang dimodifikasi untuk URL guna mengonversi tanda tangan ini menjadi sesuatu yang dapat diteruskan dalam URL.
-
Sertakan tanda tangan ini ke URL dalam parameter
signature
:https://maps.googleapis.com/maps/api/staticmap?center=40.714%2c%20-73.998&zoom=12&size=400x400&client=clientID&signature=base64signature
Untuk contoh yang menunjukkan cara menerapkan penandatanganan URL menggunakan kode sisi server, lihat Kode contoh untuk penandatanganan URL.
Untuk menandatangani URL sekarang, masukkan URL dan rahasia penandatanganan URL Anda di bawah ini. URL tersebut harus memiliki format seperti yang dijelaskan di langkah 1 di atas, dan dienkode ke URL.
Kode contoh untuk penandatanganan URL
Bagian berikut ini menunjukkan cara mengimplementasikan penandatanganan URL menggunakan kode sisi server. URL harus selalu ditandatangani sisi server agar kunci kriptografis tidak dapat dilihat pengguna.
Python
Contoh di bawah ini menggunakan library Python standar untuk menandatangani URL. (Download kodenya.)
#!/usr/bin/python # -*- coding: utf-8 -*- """ Signs a URL using a URL signing secret """ import hashlib import hmac import base64 import urllib.parse as urlparse def sign_url(input_url=None, secret=None): """ Sign a request URL with a URL signing secret. Usage: from urlsigner import sign_url signed_url = sign_url(input_url=my_url, secret=SECRET) Args: input_url - The URL to sign secret - Your URL signing secret Returns: The signed request URL """ if not input_url or not secret: raise Exception("Both input_url and secret are required") url = urlparse.urlparse(input_url) # We only need to sign the path+query part of the string url_to_sign = url.path + "?" + url.query # Decode the private key into its binary format # We need to decode the URL-encoded private key decoded_key = base64.urlsafe_b64decode(secret) # Create a signature using the private key and the URL-encoded # string using HMAC SHA1. This signature will be binary. signature = hmac.new(decoded_key, str.encode(url_to_sign), hashlib.sha1) # Encode the binary signature into base64 for use within a URL encoded_signature = base64.urlsafe_b64encode(signature.digest()) original_url = url.scheme + "://" + url.netloc + url.path + "?" + url.query # Return signed URL return original_url + "&signature=" + encoded_signature.decode() if __name__ == "__main__": input_url = input("URL to Sign: ") secret = input("URL signing secret: ") print("Signed URL: " + sign_url(input_url, secret))
Java
Contoh di bawah ini menggunakan class java.util.Base64
yang tersedia
sejak JDK 1.8 - versi lama mungkin perlu menggunakan Apache Commons atau yang serupa.
(Download
kodenya.)
import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Base64; // JDK 1.8 only - older versions may need to use Apache Commons or similar. import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.URL; import java.io.BufferedReader; import java.io.InputStreamReader; public class UrlSigner { // Note: Generally, you should store your private key someplace safe // and read them into your code private static String keyString = "YOUR_PRIVATE_KEY"; // The URL shown in these examples is a static URL which should already // be URL-encoded. In practice, you will likely have code // which assembles your URL from user or web service input // and plugs those values into its parameters. private static String urlString = "YOUR_URL_TO_SIGN"; // This variable stores the binary key, which is computed from the string (Base64) key private static byte[] key; public static void main(String[] args) throws IOException, InvalidKeyException, NoSuchAlgorithmException, URISyntaxException { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); String inputUrl, inputKey = null; // For testing purposes, allow user input for the URL. // If no input is entered, use the static URL defined above. System.out.println("Enter the URL (must be URL-encoded) to sign: "); inputUrl = input.readLine(); if (inputUrl.equals("")) { inputUrl = urlString; } // Convert the string to a URL so we can parse it URL url = new URL(inputUrl); // For testing purposes, allow user input for the private key. // If no input is entered, use the static key defined above. System.out.println("Enter the Private key to sign the URL: "); inputKey = input.readLine(); if (inputKey.equals("")) { inputKey = keyString; } UrlSigner signer = new UrlSigner(inputKey); String request = signer.signRequest(url.getPath(),url.getQuery()); System.out.println("Signed URL :" + url.getProtocol() + "://" + url.getHost() + request); } public UrlSigner(String keyString) throws IOException { // Convert the key from 'web safe' base 64 to binary keyString = keyString.replace('-', '+'); keyString = keyString.replace('_', '/'); System.out.println("Key: " + keyString); // Base64 is JDK 1.8 only - older versions may need to use Apache Commons or similar. this.key = Base64.getDecoder().decode(keyString); } public String signRequest(String path, String query) throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException, URISyntaxException { // Retrieve the proper URL components to sign String resource = path + '?' + query; // Get an HMAC-SHA1 signing key from the raw key bytes SecretKeySpec sha1Key = new SecretKeySpec(key, "HmacSHA1"); // Get an HMAC-SHA1 Mac instance and initialize it with the HMAC-SHA1 key Mac mac = Mac.getInstance("HmacSHA1"); mac.init(sha1Key); // compute the binary signature for the request byte[] sigBytes = mac.doFinal(resource.getBytes()); // base 64 encode the binary signature // Base64 is JDK 1.8 only - older versions may need to use Apache Commons or similar. String signature = Base64.getEncoder().encodeToString(sigBytes); // convert the signature to 'web safe' base 64 signature = signature.replace('+', '-'); signature = signature.replace('/', '_'); return resource + "&signature=" + signature; } }
Node.js
Contoh di bawah ini menggunakan modul Node native untuk menandatangani URL. (Download kodenya.)
'use strict' const crypto = require('crypto'); const url = require('url'); /** * Convert from 'web safe' base64 to true base64. * * @param {string} safeEncodedString The code you want to translate * from a web safe form. * @return {string} */ function removeWebSafe(safeEncodedString) { return safeEncodedString.replace(/-/g, '+').replace(/_/g, '/'); } /** * Convert from true base64 to 'web safe' base64 * * @param {string} encodedString The code you want to translate to a * web safe form. * @return {string} */ function makeWebSafe(encodedString) { return encodedString.replace(/\+/g, '-').replace(/\//g, '_'); } /** * Takes a base64 code and decodes it. * * @param {string} code The encoded data. * @return {string} */ function decodeBase64Hash(code) { // "new Buffer(...)" is deprecated. Use Buffer.from if it exists. return Buffer.from ? Buffer.from(code, 'base64') : new Buffer(code, 'base64'); } /** * Takes a key and signs the data with it. * * @param {string} key Your unique secret key. * @param {string} data The url to sign. * @return {string} */ function encodeBase64Hash(key, data) { return crypto.createHmac('sha1', key).update(data).digest('base64'); } /** * Sign a URL using a secret key. * * @param {string} path The url you want to sign. * @param {string} secret Your unique secret key. * @return {string} */ function sign(path, secret) { const uri = url.parse(path); const safeSecret = decodeBase64Hash(removeWebSafe(secret)); const hashedSignature = makeWebSafe(encodeBase64Hash(safeSecret, uri.path)); return url.format(uri) + '&signature=' + hashedSignature; }
C#
Contoh di bawah ini menggunakan library
System.Security.Cryptography
default untuk menandatangani permintaan URL.
Perhatikan bahwa kita perlu mengonversi encoding Base64 default untuk mengimplementasikan
versi aman untuk URL.
(Download
kodenya.)
using System; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using System.Web; namespace SignUrl { public struct GoogleSignedUrl { public static string Sign(string url, string keyString) { ASCIIEncoding encoding = new ASCIIEncoding(); // converting key to bytes will throw an exception, need to replace '-' and '_' characters first. string usablePrivateKey = keyString.Replace("-", "+").Replace("_", "/"); byte[] privateKeyBytes = Convert.FromBase64String(usablePrivateKey); Uri uri = new Uri(url); byte[] encodedPathAndQueryBytes = encoding.GetBytes(uri.LocalPath + uri.Query); // compute the hash HMACSHA1 algorithm = new HMACSHA1(privateKeyBytes); byte[] hash = algorithm.ComputeHash(encodedPathAndQueryBytes); // convert the bytes to string and make url-safe by replacing '+' and '/' characters string signature = Convert.ToBase64String(hash).Replace("+", "-").Replace("/", "_"); // Add the signature to the existing URI. return uri.Scheme+"://"+uri.Host+uri.LocalPath + uri.Query +"&signature=" + signature; } } class Program { static void Main() { // Note: Generally, you should store your private key someplace safe // and read them into your code const string keyString = "YOUR_PRIVATE_KEY"; // The URL shown in these examples is a static URL which should already // be URL-encoded. In practice, you will likely have code // which assembles your URL from user or web service input // and plugs those values into its parameters. const string urlString = "YOUR_URL_TO_SIGN"; string inputUrl = null; string inputKey = null; Console.WriteLine("Enter the URL (must be URL-encoded) to sign: "); inputUrl = Console.ReadLine(); if (inputUrl.Length == 0) { inputUrl = urlString; } Console.WriteLine("Enter the Private key to sign the URL: "); inputKey = Console.ReadLine(); if (inputKey.Length == 0) { inputKey = keyString; } Console.WriteLine(GoogleSignedUrl.Sign(inputUrl,inputKey)); } } }
Contoh dalam bahasa lain
Contoh yang mencakup lebih banyak bahasa tersedia di project penandatanganan URL.
Memecahkan masalah autentikasi
Jika permintaan Anda salah format atau memberikan tanda tangan yang tidak valid, Google Maps Platform
akan menampilkan error HTTP 403 (Forbidden)
.
Untuk memecahkan masalah setiap URL, Anda dapat menggunakan Debugger Penandatanganan URL. Alat bantu ini memungkinkan Anda untuk memvalidasi URL dan tanda tangan yang dihasilkan oleh aplikasi Anda secara cepat.
Atau, pelanggan Premium Plan dapat memecahkan masalah setiap URL dengan login ke Cloud Console lalu memilih Resource > Alat online Premium Plan Google Maps Platform > Debugger Penandatanganan URL untuk Web Service API dan Image API.