# 認証

あなたの製品から Beeuni へのリクエストを認証します。

Canonical page: https://beeuni.ai/docs/ja/sdk/auth

## クライアントの作成

SDK はリクエストごとに `getToken` を呼び出します。トークンの保存と更新はあなたのアプリが管理します。

```ts
import { createBeeuni } from '@beeuni/sdk';

const beeuni = createBeeuni({
  backendUrl: 'https://api.beeuni.ai/v1',
  getToken: async () => process.env.BEEUNI_API_KEY ?? null,
});

const projects = await beeuni.projects.list();
```

## 認証情報の選択

- サーバースクリプトや CI には個人 API キーを使用します。サーバーに保存し、必要最小限のスコープを選択してください。
- Agent など人間以外の呼び出しにはサービスアカウントを使用します。必要なプロジェクトロールを割り当ててください。新しいサービスアカウントにはプロジェクトへのアクセス権がありません。
- ユーザーに代わって操作するアプリには [Sign in with Beeuni](/docs/ja/sdk/sign-in) を使用します。サーバーハンドラーが OAuth トークンと更新を管理します。

## 拒否されたリクエストの処理

`401` は認証情報がない、期限切れ、または無効であることを示します。`403` は権限不足や機能が無効である可能性があります。再試行前に応答のエラーコードを確認してください。

更新されるトークンを取得関数がキャッシュする場合は、`invalidate(rejectedToken)` を追加します。SDK は拒否されたトークンでのリクエストを一度再試行する前に、このコールバックを呼び出します。

## 認証情報の保護

サーバー API キーをブラウザーのコード、URL、ログに埋め込まないでください。ブラウザーのリクエストにはサーバーまたは OAuth プロキシを使用します。漏えいした認証情報は **Account → Tokens** で取り消してください。

[完全なサンプル](/docs/ja/sdk/example)
