Skip to content

API 認証 ​

API 呼び出しに必要な認証ヘッダー、テナント指定、401 と 403 エラーの確認方法を説明します。

対象読者 ​

開発者

前提 ​

  • 連携先テナントの 認証テナント ID(authTenantId)を管理者から入手していること
  • 利用する認証方式に応じて、ユーザーセッションまたはアクセストークンを用意していること

知っておくこと ​

acomo API は Bearer 認証 と テナントヘッダー の組み合わせが必須です。ブラウザのフロントエンドも同じヘッダーを付与してバックエンドを呼び出します。

ヘッダー例説明
AuthorizationBearer eyJhbG...acomo のサインインで取得したセッション JWT、または アクセストークン
x-tenant-idyour-tenant-id認証テナント ID(サインイン URL の authTenantId と同じ値)

認証方式の選び方 ​

方式向いている用途
ユーザーセッションブラウザ拡張、社内ツール(ユーザーがサインインする)
アクセストークンサーバー間バッチ、外部システム(ユーザー操作なし)

アクセストークンは「認証」画面の アクセストークン タブで発行します。トークンには スコープ(例: Model:read)が付き、不足すると 403 になります。

ユーザーセッションを自前アプリで扱う ​

自前のフロントエンドやサーバーからユーザーをサインインさせる場合は、@acomo/client の認証ヘルパーを使います。サインイン・トークン更新・サインアウトはすべて acomo の API で完結し、アプリ側で認証基盤の SDK を組み込む必要はありません。

typescript
import { createAcomoAuth, createWebAuthStorage } from '@acomo/client'

const auth = createAcomoAuth({
  apiUrl: 'https://YOUR_ACOMO_HOST', // /api/v1 は含めない
  authTenantId: 'YOUR_AUTH_TENANT_ID',
  storage: createWebAuthStorage(window.sessionStorage), // 既定はメモリ(リロードで失われる)
  onSessionExpired: () => location.assign('/signin'),
})

await auth.signIn({ email, password })

// Authorizationとx-tenant-idは自動で付与される
const response = await auth.fetch('/my/processes')
if (!response.ok) {
  throw new Error(`listMyProcesses failed: ${response.status}`)
}
const { processes } = await response.json()

await auth.signOut()
メソッド内容
signIn({ email, password })メールアドレスとパスワードでサインインし、セッションを保存します
getAccessToken()有効なアクセストークンを返します。期限が近ければ自動で更新します
fetch(path, init)認証ヘッダー付きで API を呼び出します(401 のときは 1 度だけ更新して再試行)
restore()保存済みセッションを読み直します(ページのリロード後)
signOut()サーバー側のセッションを失効させ、保存済みセッションを破棄します

エラーは AcomoAuthError の code で判定します(invalid_argument / invalid_credentials / session_expired / no_session / network_error / unexpected_response)。

sessionStorage はタブ単位でセッションを保持します。localStorage で複数タブに共有する場合、ファサードは Web Locks API で更新を直列化するため、対応ブラウザを使用してください。複数の認証テナントを扱う場合は createWebAuthStorage(storage, 'キー名') で保存先を分けてください。

1 つのセッションを複数のクライアントで共有しない

セッションのトークンは更新のたびに新しい値へ入れ替わります。同じセッションを複数のアプリ・端末で使い回すと不正利用と判定され、セッション全体が失効します。用途ごとにサインインしてください。

Google などのソーシャルサインイン、パスワードの初期設定・リセット、メールアドレス確認は acomo の標準画面を使います。ユーザー操作のないサーバー処理にはアクセストークンを使ってください。

curl の最小リクエスト例 ​

プレースホルダーを実環境の値に置き換えてください。秘密情報はリポジトリにコミットしないでください。

bash
curl -sS \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "x-tenant-id: YOUR_AUTH_TENANT_ID" \
  "https://YOUR_ACOMO_HOST/api/v1/models"

listWorkflowModels(GET /models)はモデル一覧を返します。開発者権限と Model:read に相当する権限が必要です。

TypeScript の最小リクエスト例 ​

@acomo/client を利用する場合も、実行時に同じ Bearer とテナントコンテキストが必要です。クライアント生成時のベース URL と認証フックは組織の SDK 利用規約に従ってください。

typescript
const response = await fetch(`${baseUrl}/api/v1/models`, {
  headers: {
    Authorization: `Bearer ${accessToken}`,
    'x-tenant-id': authTenantId,
  },
})

if (response.status === 401) {
  // トークン失効・テナント不一致を疑う
}
if (response.status === 403) {
  // スコープまたはロール不足を疑う
}

失敗時の見方 ​

  1. 401 — トークン未設定・期限切れ・x-tenant-id とセッションのテナント不一致
  2. 403 — 認証は成功したが、システム実行ポリシーまたはモデルポリシーが不足
  3. CORSエラー(ブラウザのみ) — 接続元URL設定で呼び出し元オリジンが許可されているか

「API」画面の「システム実行ポリシー」列と、発行したアクセストークンのスコープを照合してください。

接続確認 ​

  • 検証環境でOpenAPIのAuthorizeに両方のスキームを設定し、参照系GETのTry it outが成功すること(本番での更新系APIは避ける。OpenAPI仕様書)
  • アクセストークン利用時、失効・ローテーション手順が運用側で決まっていること

うまくいかないとき ​

次に読む ​

対応製品バージョン: acomo 1.0.0 / 画面・操作の最終確認日: 2026年8月26日