メインコンテンツまでスキップ

外部認証

サードパーティサービスコネクタ向けの OAuth2 トークンを管理

External Authentication モジュールは、Google Drive、Google Calendar、および その他の OAuth 対応コネクタ などのサードパーティサービスに対する OAuth2 認証フローを統一的に扱う方法を提供します。認可コード(authorization code)、アクセストークン(access token)、および自動トークンリフレッシュを管理し、ユーザーに安全でシームレスな認証体験を提供します。

概要

External Auth は、OAuth2 ベースのコネクタのトークンライフサイクルを処理します。

  • 安全なトークン保存: トークンは暗号化され、ユーザーごとに安全に保存されます
  • 自動リフレッシュ: アクセストークンは期限切れになると自動的にリフレッシュされます
  • マルチユーザー対応: 各ユーザーのトークンは一意の識別子を用いて分離されます
  • コネクタ非依存: OAuth2 準拠の任意のサービスで動作します

OAuth2 認証を理解する

OAuth2 の認証フローは、主に次の 3 ステップで構成されます。

  1. ユーザー認可: ユーザーをサードパーティの OAuth 同意(consent)画面に誘導し、アプリケーションを認可してもらいます。ユーザーが同意すると、認可コードが返されます。
  2. トークン交換: 認可コードを Squid に保存すると、Squid がそれをアクセストークンとリフレッシュトークンに交換します。
  3. 自動トークン管理: Squid はユーザーごとに一意の識別子(例: user id)を使ってトークンを安全に保存します。トークンは期限切れになると自動的にリフレッシュされます。

あなたが実装するのはステップ 1 で、ステップ 2 と 3 は Squid が処理します。

基本的な使い方

前提条件

External Auth を使用する前に、以下が必要です。

  1. OAuth2 を必要とするコネクタが Squid Console で設定済みであること(例: Google Drive、Google Calendar)
  2. サードパーティサービスからの OAuth2 資格情報(Client ID、Client Secret)
  3. 必要な権限に対する適切な OAuth2 scopes
  4. 各ユーザーの一意の識別子(例: user ID)

External Auth を初期化する

import { Squid } from '@squidcloud/client';

const squid = new Squid({
appId: 'your-app-id',
apiKey: 'your-api-key', // Required for External Auth
region: 'us-east-1.aws',
environmentId: 'prod',
});

// Get the external auth client for your connector
const externalAuth = squid.externalAuth('your_connector_id');
API Key 必須

External Auth を使用するには、Squid を API key 付きで初期化する必要があります。これにより、トークンを安全に保存・取得するために必要な権限が付与されます。

サードパーティサービスから認可コード(Authorization Code)を取得する

ユーザーをサードパーティの OAuth2 同意画面に誘導し、必要な権限でアプリケーションを認可してもらいます。

  1. OAuth2 パラメータを使用して認可 URL を構築します

    • Client/App ID: OAuth provider から発行されたアプリケーションの識別子
    • Redirect URI: 認可後にユーザーが戻る URL
    • Response Type: 認可コードフローの場合は code に設定
    • Scopes: アプリケーションに必要な権限
    • Access Type: リフレッシュトークンを受け取るため offline に設定(provider により異なります)
  2. ユーザーを認可 URL に誘導します。ユーザーは OAuth 同意画面で、要求された権限への承認を求められます

  3. ユーザーが同意した後のリダイレクトを処理し、成功時に auth code を保存します。

Provider ごとの違い

OAuth2 provider によって要件が多少異なる場合があります。上記はあくまで例です。 正確な要件については、必ず各 provider の OAuth2 ドキュメントを参照してください。

認可コードは使い捨てで、通常は数分以内に期限切れになります。次のステップを使って速やかに交換してください。

認可コードを保存する

ユーザーが OAuth フローを完了し、認可コードを受け取ったら:

// Exchange authorization code for tokens and store them
const response = await externalAuth.saveAuthCode(
authCode, // The authorization code from the auth provider's callback
userId // User that the authorization code belongs to
);

console.log('Access token:', response.accessToken);
console.log('Expires at:', response.expirationTime);

saveAuthCode メソッドは次を行います:

  • auth code を受け取り、外部 API と交換してアクセストークンとリフレッシュトークンを取得します
  • トークンを Squid のストレージに安全に保存します
  • アクセストークンと有効期限(expiration time)を返します
  • 複数ユーザーがアカウントを接続できるよう、トークンを user id に紐づけます
  • ユーザーごとに 1 回だけ呼び出す必要があります

アクセストークンを取得する

API 呼び出しに使用する有効なアクセストークンを取得します。Squid がトークンのリフレッシュを自動的に処理します。

const response = await externalAuth.getAccessToken(userId);

console.log('Access token:', response.accessToken);
console.log('Expires at:', response.expirationTime);

// Use the token for API calls
const apiResponse = await fetch('https://api.example.com/data', {
headers: {
'Authorization': `Bearer ${response.accessToken}`
}
});

getAccessToken メソッドは次を行います:

  • コネクタ向けの有効なアクセストークンを取得します
  • トークンが期限切れ、または期限切れが近い場合に自動的にリフレッシュします

ベストプラクティス

  1. ユーザー識別子の管理: アプリケーション全体で一貫した一意の識別子を使用してください
  2. HTTPS のみ: 本番環境では OAuth フローに必ず HTTPS を使用してください
  3. スコープの最小化: アプリケーションに必要な最小限の OAuth scopes のみを要求してください
  4. トークンのキャッシュ: キャッシュは External Auth に任せ、アプリケーション側でトークンを保存しないでください
  5. レート制限: トークン使用時はサードパーティ API の rate limits に注意してください

対応コネクタ

External Auth は現在、以下をサポートしています。