メインコンテンツへスキップ

JWT の作成

Marketplace APIs are limited access

弊社のマーケットプレイス統合パイプラインは、現在上限に達しています。加盟店オンボーディング用セルフサービスツール開発する当面の間は、新しいパートナーを受け付けておりません。統合の構築にDoorDashにお問い合わせいただくには、 マーケットプレイス統合に関するお問い合わせ フォームにご入力ください。

JSON Web Tokens(JWT)は、DoorDash の API との通信に使用される認証用のトークン形式です。情報に関して署名することで、当事者同士が安全に通信することができます。JWT により、サービス利用の際にユーザーが秘密情報を送信することなく信用を証明することが可能になります。また、JWT の作成は、すべての一般的なプログラミング言語でサポートされています。

JWT を使用した API の認証

API で認証を行うには、JWT をベアラートークンとして認証ヘッダーに提供します。

Authorization: Bearer [JWT]
auth-version: v2

JWT の構造

JWT は、ピリオドで区切られた以下の 3 つの部分で構成されています。

  • ヘッダー
  • ペイロード
  • 署名

結果は、「aaa.bbb.ccc」のような形をしたトークンです。

ヘッダー

ヘッダーには、トークンの署名に使用されたアルゴリズムが指定されます(HMAC SHA 265(HS265)と DoorDash JWT のバージョン(v1))

{
"alg": "HS256",
"typ": "JWT",
"dd-ver": "DD-JWT-V1"
}

ヘッダーは Base64url でエンコードされ、JWT の最初の部分を構成します。

ペイロード

json オブジェクトとしてのトークンの内容です。このコンテンツは、受信者が信頼できる内容です。

ペイロード形式

{
"aud": "doordash",
"iss": DEVELOPER ID,
"kid": KEY ID,
"iat": ISSUED AT,
"exp": EXPIRATION
}

aud\: Audience(オーディエンス)常に「"doordash"」に設定する。

iss\: Issuer(発行者)デベロッパー ID(UUID 形式)に設定します。

kid\: Key ID(キー ID)JWT の署名に使用された Key ID(UUID 形式)に設定します。

iat\: Issued At(発行時間)トークンが作成された時間のことです。エポック秒でフォーマット化されます。iat を将来にすることはできません。

exp\: Expiration(有効期限)トークンの有効期限のことです。エポック秒でフォーマット化されます。exp の最大値は、発行された時刻から 30 分(1800 秒)後です。

{
"aud": "doordash",
"iss": "582e4f20-0f48-4bc2-99c2-e094675e2919",
"kid": "585698aa-2aa6-4bb4-8b3f-dd9d3f47dc28",
"iat": 1636463841,
"exp": 1636465641
}

ペイロードは Base64url でエンコードされ、JWT の 2 番目の部分を構成します。

署名

署名は、コンテンツの真正性を確認するために使用されます。署名シークレットを持っている人だけが、適切な署名をすることができます。署名は、HMAC SHA256(HS256)アルゴリズムによって計算されます。

署名は Base64url でエンコードされ、JWT の 3 番目の部分を構成します。

機密保持

署名シークレットはパスワードと同じように保護しましょう。シークレットを安全な保管場所で保管し、盗難や悪用から守りましょう。

JWT の作成

前提条件

始める前に、開発者ポータルでアクセスキーを作成して保存していることを確認してください。

続行するには、 「developer_id」、「key_id」、および「signing_secret」が必要です

npm install jsonwebtoken

JWT の生成方法

const jwt = require('jsonwebtoken')

const data = {
aud: 'doordash',
iss: '{developer_id}',
kid: '{key_id}',
exp: Math.floor(Date.now() / 1000 + 60),
iat: Math.floor(Date.now() / 1000),
}

const headers = {
algorithm: 'HS256',
header: { 'dd-ver': 'DD-JWT-V1' },
}

const token = jwt.sign(data, Buffer.from('{signing_secret}', 'base64'), headers)