認証
開発者として認証を受ける
DIMOチェックイン
開発者SDKには、認証関連の機能があり、プロセスを迅速化できます。SDKを使用している場合は、この手順を省略できる可能性があります。
JWTの取得
DIMO で認証を行う前に、以下に説明する 3 種類の JWT があります。
使用者JWT
使用者JWTには、audience
ログインしているユーザーのアカウント情報と開発者ライセンスがethereum_address
フィールド内に格納されています。このJWTは、ユーザーがDIMOで認証されていることを検証します。
14 日後、ユーザーは再度認証を行う必要があります。
フロントエンドで DIMO を使用したログインを活用します。
開発者JWT
開発者 JWT には、開発者ライセンスが とaudience
の両方として含まれていますethereum_address
。この JWT は、あなたが DIMO に登録されたアプリであることを証明します。
デフォルトは14日間です。開発者はプログラムで再認証する必要があります。14日間をハードコードするよりも、JWTをデコードして更新された有効期限のタイムスタンプを取得することを強くお勧めします。
バックエンドで開発者ライセンスを活用します。
車両JWT
車両の個人データにアクセスするための、開発者向けのセカンダリJWTです。このJWTは、車両( で識別token_id
)と、ユーザーが開発者に付与した権限の配列に固有のものです。このJWTは、アプリが車両データを取得する権限を持っていることを検証します。以前は と呼ばれていましたprivilege_token
。
10 分後、開発者はプログラムによって別の交換をトリガーします。
トークン交換 APIで開発者 JWT を使用します。
JWT を扱うときは、エラーを try-catch-retry パターンで処理し、JWT をデコードして実行時の有効期限のタイムスタンプを取得することを強くお勧めします。
認証フォーマット
DIMO はベアラー認証形式を使用します。
仕組み
DIMO の認証は次の 3 つのステップで行われます。
チャレンジの生成:特定のアドレスのチャレンジと状態を生成します。
署名チャレンジ: APIへの JSON Web Tokenを取得するためにサインインするには、署名者は暗号メッセージに署名し、関連付けられた公開鍵の所有者であることを証明します。このプロセスは、デジタル署名によるサインインと呼ばれます。
チャレンジの送信:公開キーを使用して、ユーザーのデジタル署名を検証し、設定された権限でリソースへのアクセスを許可または拒否します。
DIMO によるバックエンド アプリケーション用の Web3 署名メカニズムの実装は、以下の 3 つの手順で完了します。
ステップ1:課題を生み出す
POST
https://auth.dimo.zone/auth/web3/generate_challenge
クエリパラメータ
client_id
*
String
Configured client identifier, this is the 0x
client identifier received when you issue a Developer License.
domain
*
String
A valid redirect URI for the client, this is the domain
that you set when you configure a Developer License.
scope
*
String
Space-separated list of scopes, this needs to be openid email
response_type
*
String
This needs to be code
.
address
*
String
A hex-encoded, 0x-prefixed, 20-byte Ethereum address (case insensitive). This is the contract address of your Developer License as you are assuming the role of signer of the license. The value is essentially the same as the client_id
.
{
"state":"jot5csziknrzscg2wcbtgaofu",
"challenge":"auth.dimo.zone wants you to sign in with your Ethereum account:\n<YOUR_ADDRESS>\n\n<host> is asking you sign in.\n\nURI: https://auth.dimo.zone\nVersion: 1\nChain ID: 1\nNonce: 4P8AfZTqj9QwDM8tKc2vfIqQogxpXK\nIssued At: 2024-01-08T15:31:15Z"
}
ステップ2:サインチャレンジ
challenge
手順 1 の文字列を 16 進数にフォーマットし、先頭に 0x を付けて、開発者コンソールから取得した文字列と組み合わせてから、Ethereum トランザクションに署名し、65 バイトの署名を取得する必要がありapiKey
ます。
に署名するにはchallenge
、お好みのプログラミング言語のライブラリを使用して、ローカル秘密鍵でEthereumのトランザクションとメッセージに署名する必要があります。初心者向けに、いくつかの言語例を以下に示します。
const web3 = require('web3');
const msg = "<challenge>"
const apiKey = "<api_key>"
const formattedKey = '0x' + Buffer.from(apiKey, 'utf8');
console.log(web3.eth.accounts.sign(msg, formattedKey));
{
message: 'auth.dimo.zone wants you to sign in with your Ethereum account:\n' +
'0xf9D26323Ab49179A6d57C26515B01De018553666\n' +
'\n' +
'app.dimo.zone is asking you sign in.\n' +
'\n' +
'URI: https://auth.dimo.zone\n' +
'Version: 1\n' +
'Chain ID: 1\n' +
'Nonce: EXVgxuxMiNfdWzwIcQU4XZ79zzwX6L\n' +
'Issued At: 2024-01-22T15:34:47Z',
messageHash: '0x293013bcae66e507384b791b35bd3701284b613887fc11d3a6debcde394c66db',
v: '0x1c',
r: '0xccd996ee0f2d18944034f29e5a9565158202d8d66194adcbe0c13eba96feb18e',
s: '0x1783254ec656186cd1461693969c10aff0014f4690ee2f83781dbf8c4c657ef3',
signature: '0xcbd996ee0f2d18944034f29e5a9565158202d8d66194adcbe0c13eba96feb18e1783254ec656186cd1461693969c10aff0014f4690ee2f83781dbf8c4a657ef31c'
}
ステップ3: チャレンジを提出する
POST
https://auth.dimo.zone/auth/web3/submit_challenge
x-www-form-urlencoded
ボディパラメータに使用します。
リクエスト本文
client_id
*
String
Configured client identifier, this is the 0x
client identifier received when you issue a Developer License.
state
*
String
The state
string returned from Step 1.
grant_type
*
String
This needs to be authorization_code
.
domain
*
String
A valid redirect URI for the client, this is the domain
that you set when you configure a Developer License.
signature
*
String
The 0x-prefixed signature obtained from Step 2.
{
"access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijc4ZjVkNDk3ZjVjZDM3MzljYjNhYmZhZDExZjRhZWQ2ZWQxNmNhMWYifQ.eyJpc3MiOiJodHRwczovL2F1dGguZGV2LmRpbW8uem9uZSIsInByb3ZpZGVyX2lkIjoid2ViMyIsInN1YiI6IkNpb3dlR1k1UkRJMk16SXpRV0kwT1RFM09VRTJaRFUzUXpJMk5URTFRakF4UkdVd01UZzFOVE0zT0RjU0JIZGxZak0iLCJhdWQiOiJ2ZWhpY2xlLWdlbml1cyIsImV4cCI6MTcwNTkzNTg5MCwiaWF0IjoxNzA0NzI2MjkwLCJhdF9oYXNoIjoiQnBVZXJtcmJMMUlNVkxNdXpELW93USIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZXRoZXJldW1fYWRkcmVzcyI6IjB4ZjlEMjYzMjNBYjQ5MTc5QTZkNTddMjY1MTVCMDFEZTAxODU1Mzc4NyJ9.BrZeLozHwFxQoyTnpe9TVjoFFyqh3xs2xi6KQrguQGyyWoqFr03SjDCbY_Les6IUI9JD_xWf9bu04w82LD0NqsnO7nqrYwrVwriYUmh1cZskZPUDrL5_kMaN0FxQa-ea9g4ruVEXLU_aM206q2Wp7qqyjd5AhuPAgqAL6mDGviGXr2lJYfxrs0eclO9-w4Z4XO0hRkLO_ODhCDrBeKcwPHEmhTNH6Vw0ReI_05FwIFzz_biIpS6rj45F0nSLrMcJx-2UD9upaMDzLwA_9QPoXzoA3hfdPNKGPU0KEgMJF9thFa2K0daqXqAMXUkxwOSSYWdn58Z8NJGFWN6bzyJqC3",
"token_type": "bearer",
"expires_in": 1209599,
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijc4ZjVkNDk3ZjVjZDM3MzljYjNhYmZhZDExZjRhZWQ2ZWQxNmNhMWYifQ.eyJpc3MiOiJodHRwczovL2F1dGguZGV2LmRpbW8uem9usSIsInByb3ZpZGVyX2lkIjoid2ViMyIsInN1YiI6IkNpb3dlR1k1UkRJMk16SXpRV0kwT1RFM09VRTJaRFUzUXpJMk5URTFRakF4UkdVd01UZzFOVE0zT0RjU0JIZGxZak0iLCJhdWQiOiJ2ZWhpY2xlLWdlbml1cyIsImV4cCI6MTcwNTkzNTg5MCwiaWF0IjoxdzA0NzI2MjkwLCJhdF9oYXNoIjoibGdyZGx5UXhWVWlMY0o1ZWxmTU1odyIsImNfaGFzaCI6IkZid2NTVUlJcnl0S2xVblZHWjE4Z3ciLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImV0aGVyZXVtX2FkZHJlc3MiOiIweGY5RDI2MzIzQWI0OTE3OUE2ZDU3QzI2ETE1QjAxRGUwMTg1NTM3ODcifQ.afO4QhbCfzWZpB_VQhTuJBONA8hYMc8Dw97kNdDBwbYWCIZ_PFzIRUPJe75k19Y0oKm8hNeadyzV36x4uvv4wagfjEPXcttqzoiRrnFjwX5tHZgNaRSznBf6W6PoNzkx7GyGWmeW_AtV3Y4g_fDhC2PKVZeWlw346Prchf_mLDuC5d6HSydu4LoSGHRVhMXlbbwoXGcc3Jui-wMxli8gYx1N__5DXiGvasZgmZefRq9DqPhd5Nlp0AV7bDSSLVJOUZJybbHT153les-_IzMlyqowxrAaJl9ENk5ME5ak4g_gHUpJzPQAf3oe61K-sYKNUYcguah73xfysmbWc_bFsg"
}
開発者ノート
ここまで進めれば、
access_token
DIMO APIエンドポイントへのアクセスに使用できる が作成済みです。Telemetry APIなどの保護されたAPIエンドポイントの場合は、Token Exchange APIで説明されているVehicle JWTが必要です。受け取ったHTTPリクエストヘッダーを使用するには
access_token
、ベアラー認証スキームに従ってHTTPリクエストヘッダーをフォーマットしてください。一般的なフォーマットは以下のとおりです。{ "Authorization": "Bearer <access_token>"}
Last updated
Was this helpful?