Agent skill

grant-management

Grant管理(Grant Management)機能の開発・修正を行う際に使用。AuthorizationGrant、ConsentClaims、同意管理、Grant管理API実装時に役立つ。

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/grant-management

SKILL.md

Grant管理(Grant Management)開発ガイド

ドキュメント

  • documentation/docs/content_03_concepts/03-authentication-authorization/concept-05-grant-management.md - Grant管理概念
  • documentation/openapi/swagger-grant-management-ja.yaml - Grant管理API仕様(OpenAPI)

機能概要

Grant管理は、認可コンテキストを管理する層。

  • AuthorizationGrant: ユーザー、認証、クライアント、スコープの複合構造
  • AuthorizationGranted: 永続化されたGrant(created_at/updated_at含む)
  • ConsentClaims: 同意情報の管理
  • Scopeベース同意: クライアント別にscopeを記録
  • Grant管理API: 管理者向けのGrant一覧取得・詳細取得・取り消しAPI

モジュール構成

libs/
├── idp-server-core/                         # Grantコア
│   └── .../grant_management/
│       ├── AuthorizationGranted.java        # 永続化Grant(created_at/updated_at含む)
│       ├── AuthorizationGrantedIdentifier.java
│       ├── AuthorizationGrantedQueries.java # クエリパラメータ(limit上限1000)
│       ├── AuthorizationGrantedRepository.java
│       ├── AuthorizationGrantedQueryRepository.java
│       ├── grant/
│       │   ├── AuthorizationGrant.java      # 認可Grant
│       │   ├── GrantIdTokenClaims.java
│       │   └── GrantUserinfoClaims.java
│       └── consent/
│           └── ConsentClaims.java           # 同意情報
│
├── idp-server-core-adapter/                 # DB実装
│   └── .../grant_management/
│       ├── AuthorizationGrantedDataSource.java
│       ├── AuthorizationGrantedQueryDataSource.java
│       ├── ModelConverter.java              # DB→モデル変換
│       ├── PostgresqlExecutor.java
│       └── MysqlExecutor.java
│
├── idp-server-control-plane/                # Grant管理API定義
│   └── .../management/oidc/grant/
│       ├── OrgGrantManagementApi.java       # APIインターフェース
│       ├── GrantManagementContext.java
│       ├── GrantManagementContextBuilder.java
│       ├── handler/
│       │   ├── OrgGrantManagementHandler.java
│       │   ├── GrantManagementService.java
│       │   ├── GrantFindListService.java
│       │   ├── GrantFindService.java
│       │   └── GrantRevocationService.java  # Grant取り消し+トークン削除
│       └── io/
│           ├── GrantManagementRequest.java
│           ├── GrantManagementResponse.java
│           ├── GrantManagementResult.java
│           └── GrantManagementStatus.java
│
├── idp-server-use-cases/                    # EntryService
│   └── .../control_plane/organization_manager/
│       └── OrgGrantManagementEntryService.java
│
└── idp-server-springboot-adapter/           # REST API
    └── .../control_plane/restapi/organization/
        └── OrganizationGrantManagementV1Api.java

Grant管理API(Organization Level)

エンドポイント

メソッド パス 説明 権限
GET /v1/management/organizations/{org-id}/tenants/{tenant-id}/grants Grant一覧取得 GRANT_READ
GET /v1/management/organizations/{org-id}/tenants/{tenant-id}/grants/{grant-id} Grant詳細取得 GRANT_READ
DELETE /v1/management/organizations/{org-id}/tenants/{tenant-id}/grants/{grant-id} Grant取り消し GRANT_DELETE

クエリパラメータ(一覧取得)

パラメータ 説明
user_id ユーザーIDでフィルタ
client_id クライアントIDでフィルタ
from 作成日時の開始範囲(ISO 8601)
to 作成日時の終了範囲(ISO 8601)
limit 最大件数(デフォルト20、上限1000)
offset スキップ件数

dry_runモード

DELETE時に ?dry_run=true を指定すると、実際の削除を行わずシミュレーション結果を返す。

Grant取り消し時の動作

Grant削除時に、同じuser+clientの全トークン(アクセストークン、リフレッシュトークン)も削除される(Auth0スタイル)。

AuthorizationGranted構造

java
public class AuthorizationGranted {
    AuthorizationGrantedIdentifier identifier;
    AuthorizationGrant authorizationGrant;
    LocalDateTime createdAt;
    LocalDateTime updatedAt;

    public Map<String, Object> toMap() {
        // id, user, client, scopes, created_at, updated_at を返す
    }
}

AuthorizationGrant構造

java
public class AuthorizationGrant {
    TenantIdentifier tenantIdentifier;
    User user;
    Authentication authentication;
    RequestedClientId requestedClientId;
    ClientAttributes clientAttributes;
    GrantType grantType;
    Scopes scopes;
    GrantIdTokenClaims idTokenClaims;
    GrantUserinfoClaims userinfoClaims;
    CustomProperties customProperties;
    AuthorizationDetails authorizationDetails;
    ConsentClaims consentClaims;
}

Grantが作成されるタイミング

  • Authorization Code Flowでの同意時
  • Password Grantでのトークン発行時(スコープはマージされる)
  • その他のGrant Typeでのトークン発行時

E2Eテスト

e2e/src/tests/
├── usecase/standard/
│   └── standard-05-grant-revocation.test.js   # Grant取り消しE2E
└── scenario/control_plane/organization/
    └── organization_grant_management.test.js  # Grant管理APIテスト

コマンド

bash
# ビルド
./gradlew :libs:idp-server-core:compileJava
./gradlew :libs:idp-server-control-plane:compileJava

# E2Eテスト
cd e2e && npm test -- src/tests/usecase/standard/standard-05-grant-revocation.test.js
cd e2e && npm test -- src/tests/scenario/control_plane/organization/organization_grant_management.test.js

トラブルシューティング

Grantが見つからない

  • AuthorizationGrantedが正しく生成されているか確認
  • ユーザー、認証、クライアント情報が揃っているか確認
  • Password Grantの場合、ResourceOwnerPasswordCredentialsGrantServiceでGrant作成ロジックを確認

Grant取り消し後もトークンが有効

  • GrantRevocationServicedeleteByUserAndClientが呼ばれているか確認
  • トランザクションが正しくコミットされているか確認

created_at/updated_atがレスポンスに含まれない

  • ModelConverter.parseLocalDateTime()が正しくパースしているか確認
  • DBからのtimestamp形式を確認(LocalDateTimeParserで対応)

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results