OAuth 2.0 トークンリクエストをコーディングします

OAuth 2.0 トークン認証を使用する場合は、 HERE サービスへのリクエストごとに OAuth 2.0 トークン資格情報を取得するようにアプリケーションをコード化する必要があります。 これを行うには、独自のコードを作成 するか、 HERE Java AAA SDK から入手できるを使用するか、またはサードパーティのライブラリを使用 するかを選択できます。これらのライブラリの多くは、この OAuth サイトに一覧表示されています。

このトピックでは、 OAuth サービスにリクエストを作成するために、正しく署名された HERE 2.0 ベアラーアクセストークンを生成する方法について説明します。 HERE は、 HERE platform への要求を認証する目的で、アプリケーションが最大 24 時間使用できるこれらの安全なアクセストークンを取得するための REST API を提供します。 新しい署名を作成し、古い署名の有効期限が切れたときに新しいトークンを要求します。

手順 1. アプリケーションを登録します

アプリケーションを登録すると、トークンを取得するために必要なアクセスキー ID とアクセスキーシークレットが生成されます。 まだ登録していない場合は、登録してから続行してください。

  • HERE platform ユーザーの場合 は、 OAuth トークンの説明に従ってアプリの API 資格情報を取得します。
  • If you are a here-tech.skawa.fun user, get API credentials for your app as described in OAuth tokens.

手順 2. 署名を作成します

アクセスキー ID とアクセスキーシークレットを使用して、トークン署名を作成します。 HERE Authentication and Authorization API では、 OAuth コア 1.0 仕様で説明されている署名プロセスを使用してトークンに署名する必要があります。 HERE Java AAA SDKまたはサードパーティライブラリを使用して、この操作を行うための独自のコードを作成でき ます。これらのコードの多くは、この OAuth サイトに一覧表示されています。

認証と承認の API に対するトークンリクエストごとに、新しい署名を作成する必要があります。 署名は 1 回のみ使用できます。

a) 署名のベース文字列を作成します

署名を作成する最初の手順は、署名のベース文字列を作成することです。 この文字列には、シグニチャの生成時に使用するパラメータが含まれています。 まず、次の表に示すパラメータが設定されていることを確認してください。

パラメーター 位置情報 必須ですか ? 説明
GRANT_TYPE 本文 はい 常に "client_credentials" を使用します。
範囲 本文 いいえ プロジェクト HERE リソースネーム 。
OAuth_consumer_key ヘッダー はい トークンを生成するアクセスキー ID 。 アクセスキーの作成時にダウンロードした資格情報ファイルでは、アクセスキー ID が here.access.key.id プロパティの値になります。 詳細については、 OAuth トークン( HERE platform の場合)または OAuth トークン(開発者ポータルの場合)を参照してください。
OAuth_nonce ヘッダー はい このシグニチャの一意の文字列。 文字列は前の署名で使用できません。 認証および許可 API に対する各要求には一意の署名が必要です。このパラメータの値は、署名が一意であることを確認するために使用されます。
OAuth_signature_method ヘッダー はい 常に「 HMAC-SHA256 」を使用してください。
OAUTH_TIMESTAMP ヘッダー はい リクエストが生成された時点での Unix のエポックからの経過時間 ( 秒 ) 。 HERE platform は、過去または将来に作成されたリクエストを拒否します。
OAuth_version ヘッダー はい 常に「 1.0 」を使用します。 OAuth トークンが OAuth 2.0 仕様に準拠している場合でも、シグニチャ自体が OAuth 1.0 仕様に準拠するため、 1.0 を指定する必要があります。

次のように、パラメータを 1 つの文字列に結合します。

  • URL はすべてのキーと値をエンコードします。
  • キーと値のペアのリストをキーでアルファベット順に並べ替えます。
  • 各キーと値のペアをアンパサンド文字 ("&") で区切り、連結します。 結果は、次のような署名ベースの文字列になります ( わかりやすいように改行が追加されます ) 。
grant_type=client_credentials
 &scope=hrn:here:authorization::myrealm:project/myproject
 &oauth_consumer_key=access-key-id-1234
 &oauth_nonce=LIIpk4
 &oauth_signature_method=HMAC-SHA256
 &oauth_timestamp=1456945283
 &oauth_version=1.0

b) ベース文字列を作成します

HTTP メソッド、ベース URL 、およびパラメータ文字列を、「ベース文字列」と呼ばれる 1 つの文字列に結合します。 シグニチャの生成元の文字列です。 ベース文字列の形式は次のとおりです。

POST&https://account.api.here.com/oauth2/token&<URL encoded parameter string>

ベース文字列は次のもので構成されてい

  • caps (POST) の HTTP メソッドに、アンパサンド ("&") を付けます。
  • HERE トークンサービスの URL の後にアンパサンド ("&") が続きます。
  • URL でエンコードされたパラメータ文字列。

たとえば、次のように改行が追加されます ( わかりやすいように改行が追加されます ) 。

POST
 &https%3A%2F%2Faccount.api.here.com%2Foauth2%2Ftoken
 &grant_type%3Dclient_credentials%26scope%3Dhrn:here:authorization::myrealm:project%2Fmyproject%26oauth_consumer_key%3Daccess-key-id-1234%26oauth_nonce%3DLIIpk4%26oauth_signature_method%3DHMAC-SHA256%26oauth_timestamp%3D1456945283%26oauth_version%3D1.0

URL でエンコードされたベース文字列には、正確に 2 つのアンパサンド ("&") を含める必要があります。

c) 署名キーを作成します

署名キーは、 URL でエンコードされたアクセスキーのシークレットであり、その後にアンパサンド ("&") が続きます。 アクセスキーの作成時にダウンロードした資格情報ファイルでは、アクセスキーのシークレットが here.access.key.secret プロパティの値になります。

HERE では「トークン secret 」フィールドを使用しないため、署名キーはエンコードされたコンシューマシークレットの後にアンパサンド(「 & 」)が続くだけです。 例 :

NtxCeo4IE3XESAMPLEwY3348TVYPWAcB_-WaoeSAMPLEW-cowuEhn1Xg2cmhP5fqqqq83s0OwpaoNSAMPLE&

d) 署名を作成します

署名のベース文字列と署名キーを HMAC-SHA256 ハッシュアルゴリズムに渡し、結果を base64 文字列に変換して署名を作成します。

ステップ 3 : トークンをリクエストします

アクセスキーと署名を取得したら、いずれかの認証 API を使用してトークンを要求できます。 詳細については、『 API リファレンス :

一般的なリクエストには、次の要素が含まれます。

URL

https://account.api.here.com/oauth2/token

HTTP ヘッダー

Content-Type: application/x-www-form-urlencoded
Authorization: OAuth
oauth_consumer_key="<Access Key>",
oauth_nonce="<Random string, uniquely generated for each request>",
oauth_signature="<Signature>",
oauth_signature_method="HMAC-SHA256",
oauth_timestamp="<Epoch seconds>",
oauth_version="1.0"

リクエスト本文

リクエストの本文には、次のものが含まれて

grant_type=client_credentials

の値 grant_type は常ににする必要 client_credentialsがあります。

プロジェクトスコープのアクセス トークンを要求するために、オプションのスコープをリクエスト本文に追加できます

scope="hrn:here:authorization::myrealm:project/myproject"

サンプルリクエスト

POST /oauth2/token HTTP/1.1
Host: account.api.here.com
Authorization: OAuth
oauth_consumer_key="1tqA_sample1fLhs2z6_q1l",
oauth_signature_method="HMAC-SHA256",
oauth_timestamp="1512072698",
oauth_nonce="ZGAaMP",
oauth_version="1.0",
oauth_signature="Q0sample4lqICrx19%2F4ahaH%2Fi2O0NgqDUQJgti5U3Q%3D"
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
scope="hrn:here:authorization::myrealm:project/myproject"

応答

レスポンス本文には次のものが含まれて

パラメーター 説明
access_token REST 要求の認証に使用できるトークン。
トークンタイプ 認証および承認 API によって発行されたトークンのタイプ。 API がベアラトークンを発行するため、この値は常に「 bearer 」になります。
有効期限 _ インチ トークンの有効期限が切れるまでの秒数。 トークンの有効期限は、発行後 24 時間です。
範囲 スコープ指定されたトークンが要求された場合のプロジェクトの HERE リソースネーム 。

応答の例

{
    "access_token":"VE5URXlJbjAuLmE4S0l4eVpQVE1zbHRwcnQyZ1BSVGcuS3RHT2V...",
    "token_type":"bearer",
    "expires_in":86399,
    "scope":"hrn:here:authorization::myrealm:project/myproject"
}

アクセス トークンの使用

これで、 HERE API に対する REST リクエストの作成に使用するアクセスベアラートークンを取得できました。 トークンを要求するための署名の作成は、必ずしも簡単ではありません。 SDK では、トークンの作成および使用方法の例を見つけることができます。

このコードでは、 credentials.properties ファイルが ~/. HERE / フォルダに保存されていることを前提としています。

HERE Java SDK を使用すると、次の 2 行のコードでトークンを作成できます。

HereAccessTokenProvider accessTokens = HereAccessTokenProvider.builder().build();
String accessToken = accessTokens.getAccessToken();

トークンリクエストの HTTP 承認ヘッダーに、ベアラー REST としてトークンを含めます。

Authorization: Bearer <token>

REST リクエストの例

GET /maptile/2.1/maptile/newest/normal.day/13/4400/2686/256/png8
Host: 1.base.maps.ls.hereapi.com
Authorization: Bearer eyJhbGceOyJSAMPLEiIsImN0eSISAMPLEt7VTFIllwIM0cKNCjN2WCCTqlwEEmk-t3gx1BpqUFoeBSAMPLEvhj8nl-RBGcyoljY...
Cache-Control: no-cache

」に一致する結果は 件です

    」に一致する結果はありません