外部APIクライアントの作成
組織管理者が鍵ペアを用意し、管理画面で外部APIクライアントの作成操作を行います。この操作を受けて、metatellの認証基盤にOAuthクライアントが作成されます。管理画面に登録するのは公開鍵だけです。秘密鍵は外部システムで安全に保管してください。
1. 鍵ペアを作成する
外部APIクライアントの認証には、ES256用の鍵ペア(公開鍵・秘密鍵)が必要です。
以下はNode.js環境でjoseを使ってJWKを生成する例です。
mkdir metatell-external-api-client-test
cd metatell-external-api-client-test
npm init -y
npm install jose
generate-keys.mjsを作成します。
import { generateKeyPair, exportJWK } from 'jose'
import { randomUUID } from 'node:crypto'
import { writeFile } from 'node:fs/promises'
const kid = randomUUID()
const { privateKey, publicKey } = await generateKeyPair('ES256', { extractable: true })
const publicJwk = {
...(await exportJWK(publicKey)),
alg: 'ES256',
kid,
use: 'sig'
}
const privateJwk = {
...(await exportJWK(privateKey)),
alg: 'ES256',
kid,
use: 'sig'
}
await writeFile('public-jwk.json', `${JSON.stringify(publicJwk, null, 2)}\n`, { mode: 0o644 })
await writeFile('private-jwk.json', `${JSON.stringify(privateJwk, null, 2)}\n`, { mode: 0o600 })
console.log(`公開鍵をpublic-jwk.jsonに出力しました(kid: ${kid})`)
以下のコマンドでスクリプトを実行します。
node generate-keys.mjs
生成されるファイルは次の2つです。
| ファイル | 用途 | 取り扱い |
|---|---|---|
public-jwk.json | metatell管理画面への登録 | kty、crv、x、y、kid、alg、useを含む |
private-jwk.json | client assertionの署名 | 秘密鍵パラメータdを含むため、外部システムだけで保管する |
秘密鍵を間違って登録しないように注意して下さい。