検索は翻訳元へ

認証

API は、3つの認証方式に対応しています、順番にやってみましょう。
公開エンドポイント(トークン生成、翻訳)へのリクエストは、認証をスキップします。

API Keys

サーバー間の統合や、 CLI ツールでの利用に推奨される方式です。

キーの生成:

bin/plugin api keys:generate --user=admin --name="CI Pipeline" --expiry=90

リクエスト時の使い方:

# Via header (preferred)
curl -H "X-API-Key: grav_abc123..." https://yoursite.com/api/v1/pages

# Via query parameter (useful for quick testing)
curl "https://yoursite.com/api/v1/pages?api_key=grav_abc123..."

API キーは、ユーザーアカウントに bcrypt ハッシュとして保存されます。
各キーは、オプションの有効期限と、最後に利用したタイムスタンプを持つことができます。

キーの管理

  • キーの一覧: bin/plugin api keys:list --user=admin
  • キーの取り消し: bin/plugin api keys:revoke --user=admin --id=key_id
  • また、管理パネル UI の各ユーザーのプロフィールページで、キーを管理することもできます

JWT トークン

admin-next のようなブラウザベースのアプリケーションに最適です。

トークンの取得:

curl -X POST https://yoursite.com/api/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "password"}'

レスポンス:

{
  "data": {
    "access_token": "eyJ...",
    "refresh_token": "eyJ...",
    "token_type": "Bearer",
    "expires_in": 3600
  }
}

リクエストでの使い方:

curl -H "Authorization: Bearer eyJ..." https://yoursite.com/api/v1/pages

有効期限切れのトークンを更新:

curl -X POST https://yoursite.com/api/v1/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{"refresh_token": "eyJ..."}'

セッション通過

ユーザーがすでに Grav の有効なセッションを持っている場合(たとえば、管理パネルにログイン中の場合)、 API は自動的にそのセッションを受け付けます。
これは、シームレスな統合のために、主に管理パネルインターフェースで利用されます。

パーミッション

API は、自身のパーミッション名前空間を使い、管理パネルのパーミッションとは区別されます:

パーミッション目的
api.accessAPI への基本的なアクセス
api.pages.readpages の読み込み
api.pages.writepages の作成、更新、削除
api.media.readメディアファイルの読み込み
api.media.writeメディアファイルの更新、削除
api.config.readconfig 設定の読み込み
api.config.writeconfig 設定の修正
api.users.readユーザーアカウントの読み込み
api.users.writeユーザーの作成、修正、削除
api.gpm.readパッケージの一覧、更新チェック
api.gpm.writeパッケージのインストール、削除、更新
api.system.readSystem info, scheduler status
api.system.writeCache management, scheduler
api.webhooks.readwebhook の一覧
api.webhooks.writewebhooks の管理

ユーザーアカウントの access 設定により、ユーザーのパーミッションを許可します:

access:
  api:
    access: true
    pages:
      read: true
      write: true
    media:
      read: true
      write: true