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

認証

@blocklet/server-js ライブラリは、APIリクエストを認証するための2つの主要な方法を提供します:認証トークンとアクセスキーです。適切な方法は、アプリケーションの環境とセキュリティ要件によって異なります。認証トークンは通常、ブラウザのようなユーザー向けのアプリケーションで使用され、アクセスキーは安全なサーバー間通信のために設計されています。

このセクションでは、両方の認証戦略を実装する方法について説明します。

Authentication

認証トークンの使用

これは、ブラウザで実行されるウェブアプリケーションなど、ユーザーがアクティブにログインしているアプリケーションで最も一般的な認証方法です。認証トークンは通常、ユーザーのセッションから取得され、限られた時間のみ有効です。

この方法を使用するには、クライアントをインスタンス化し、setAuthTokenメソッドを使用してトークンを提供します。

Using setAuthToken

javascript
import BlockletServerClient from '@blocklet/server-js';

// Blocklet Serverのエンドポイント
const endpoint = 'http://localhost:4000/api';
const client = new BlockletServerClient(endpoint);

// ユーザーがログインした後にセッションから取得したトークン。
// 通常、これはBlocklet ServerドメインのブラウザのlocalStorage内で`__sst`というキーの下にあります。
const userAuthToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXBlIjoidXNlciIsImRpZCI6Inoxbjd5TG5BRDV3VHJ5RjU2S0IzU3N0MVJlbVpVQTQ4OEhoIiwicm9sZSI6ImFkbWluIiwicHJvdmlkZXIiOiJ3YWxsZXQiLCJreWMiOjAsImVsZXZhdGVkIjpmYWxzZSwiZnVsbE5hbWUiOiJza3lwZXNreSIsImlhdCI6MTc2MTAzODQ1OSwiZXhwIjoxNzYxMDQyMDU5fQ.rLoDz0o2Jg83BP_IGF8bwhHT3Qnyhy8KfVQNzSa1ycY';

client.setAuthToken(userAuthToken);

// これ以降のすべてのAPI呼び出しは自動的に認証されます
async function fetchNodeInfo() {
  try {
    const response = await client.getNodeInfo();
    console.log('Node Info:', response.info.name);
  } catch (error) {
    console.error('Failed to fetch node info:', error);
  }
}

fetchNodeInfo();

トークンが設定されると、クライアントは後続のすべてのGraphQLリクエストにAuthorization: Bearer <token>ヘッダーを自動的に含めます。

アクセスキーの使用

アクセスキーは、サーバー間通信、バックグラウンドサービス、またはユーザーセッションが利用できない非対話型環境を対象としています。この方法は、プログラムによるアクセスを許可するためのより安全で永続的な方法を提供します。

アクセスキーを使用するには、必要な暗号化ライブラリを含むクライアントのネイティブバージョンを使用する必要があります。

Importing the Native Client

javascript
import BlockletServerClient from '@blocklet/server-js/native';

次に、setAuthAccessKeyメソッドを使用してクライアントを設定します。このメソッドは、次のフィールドを持つオブジェクトを受け入れます:

  • accessKeyId string (required) — キーの公開識別子です。これは通常、関連付けられたウォレットのDIDアドレスです。
  • accessKeySecret string (required) — リクエストに署名するために使用される秘密鍵(またはプライベートキー)です。クライアントサイドのコードでは決して公開しないでください。
  • type any (required) — 署名アルゴリズムまたはウォレットタイプです。サポートされている値には、@ocap/walletのウォレットタイプ(例:eth、arc)のほか、'sha256'や'totp'が含まれます。タイプは、Blocklet Serverでアクセスキーがどのように設定されたかと一致する必要があります。

Using setAuthAccessKey

javascript
import BlockletServerClient from '@blocklet/server-js/native';

const endpoint = 'http://localhost:4000/api';
const client = new BlockletServerClient(endpoint);

client.setAuthAccessKey({
  accessKeyId: 'zNKjw25A312AbC5A1234567890abcdefABCDEF', // あなたのアクセスキーID
  accessKeySecret: 'sk_1234567890abcdefABCDEF1234567890abcdef', // あなたのアクセスキーシークレット
  type: 'eth' // キーに関連付けられたウォレットタイプ
});

// これ以降のすべてのAPI呼び出しは、署名付きヘッダーを使用して認証されます
async function fetchBlocklets() {
  try {
    const response = await client.getBlocklets();
    console.log(`Found ${response.blocklets.length} blocklets.`);
  } catch (error) {
    console.error('Failed to fetch blocklets:', error);
  }
}

fetchBlocklets();

アクセスキーを使用する場合、クライアントは各リクエストに対して一意の署名を生成し、それをx-access-signatureヘッダーで、x-access-key-idやその他の必要な認証ヘッダーと共に送信します。これにより、秘密鍵を公開することなく、各リクエストが安全に認証されることが保証されます。

リクエストの認証方法がわかったので、APIリファレンスに進んで、利用可能なクエリとミューテーションを確認できます。