BLUEPRINT
第7章:セキュリティと認証
7.1 概要
セキュリティメカニズムはプロトコルの重要な構成要素であり、スキル提供者が誰がスキルを発見・呼び出せるかを制御できることを保証します。プロトコルは複数の認証方式とアクセス制御ポリシーをサポートし、オープン性とセキュリティのバランスを取ります。
7.2 アクセス制御ポリシー
3レベルアクセス制御
| レベル | 発見可視性 | 呼び出し権限 | 適用シナリオ |
|---|---|---|---|
public | 全員に可視 | 認証不要で呼び出し可能 | オープンAPI、公開ナレッジベース |
restricted | 全員に可視 | 認証後に呼び出し可能 | 商用API、有料サービス |
private | 認証後のみ可視 | 認証後に呼び出し可能 | 内部ツール、プライベートサービス |
アクセス制御と発見の関係
- 未認証リクエストがWell-Known URIにアクセスした場合:
- すべての
publicおよびrestrictedスキルを返す privateスキルは返さない
- すべての
- 認証済みリクエストがWell-Known URIにアクセスした場合:
- すべてのスキルを返す(
privateを含む)
- すべてのスキルを返す(
7.3 認証方式
API Key認証
最もシンプルな認証方式。HTTP Headerを通じてキーを渡します。
Descriptor宣言:
{
"type": "api_key",
"description": "HTTP Headerを通じてAPI Keyを渡す",
"header": "X-API-Key"
}
呼び出し時のHeader付加:
POST /invoke HTTP/1.1
Host: api.example.com
X-API-Key: sk-your-api-key-here
Content-Type: application/json
OAuth 2.0認証
きめ細かい権限制御が必要なシナリオに適しています。
Descriptor宣言:
{
"type": "oauth2",
"oauth2": {
"authorization_url": "https://example.com/oauth/authorize",
"token_url": "https://example.com/oauth/token",
"scopes": {
"skill:invoke": "スキルの呼び出し",
"skill:read": "スキル情報の読み取り",
"skill:admin": "スキル設定の管理"
}
}
}
呼び出し時のBearer Token付加:
POST /invoke HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
Content-Type: application/json
カスタム認証
非標準の認証シナリオに適しています。提供者はinstructionsフィールドを通じて認証方式を説明します。
Descriptor宣言:
{
"type": "custom",
"custom": {
"instructions": "HMAC-SHA256でリクエストボディに署名し、署名をX-Signature headerに配置する",
"parameters": [
{
"name": "secret_key",
"type": "string",
"description": "HMAC署名用の秘密鍵",
"required": true
}
]
}
}
認証なし
公開スキルは認証不要:
{
"type": "none"
}
7.4 認証エラー処理
認証失敗(401)
有効な資格情報が提供されない場合:
{
"error": {
"code": "AUTH_REQUIRED",
"message": "Authentication is required to invoke this skill",
"details": {
"required_auth_type": "oauth2",
"authorization_url": "https://example.com/oauth/authorize"
}
}
}
権限不足(403)
資格情報は有効だがアクセス権がない場合:
{
"error": {
"code": "PERMISSION_DENIED",
"message": "Insufficient permissions to invoke this skill",
"details": {
"required_scopes": ["skill:invoke"],
"current_scopes": ["skill:read"]
}
}
}
7.5 セキュリティベストプラクティス
- すべての通信はHTTPSを使用すべき
- API KeyはHeaderを通じて渡し、URLへの露出を避ける
- OAuth 2.0 Tokenには適切な有効期限を設定する
- スキル提供者は悪用防止のためレート制限を実装すべき
- 機密性の高いスキルは
privateアクセスポリシーを使用し、未認可者による発見を防ぐ
