# Authorization Endpoint

> 認可エンドポイント（Authorization Endpoint）機能の開発・修正を行う際に使用。Authorization Request処理、同意フロー、Authorization Code生成実装時に役立つ。

- Skill: `majiayu000/authorization-endpoint` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/authorization-endpoint`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/authorization-endpoint/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/authorization-endpoint

---


# 認可エンドポイント（Authorization Endpoint）開発ガイド

## ドキュメント

- `documentation/docs/content_06_developer-guide/03-application-plane/02-authorization-flow.md` - 認可フロー実装ガイド
- `documentation/docs/content_03_concepts/03-authentication-authorization/concept-04-authorization.md` - 認可概念

## 機能概要

認可エンドポイントは、OAuth 2.0/OpenID Connectの認可リクエストを処理する層。
- **Authorization Request処理**: リクエスト検証、保存
- **同意フロー**: ユーザー同意の取得
- **Authorization Code生成**: 認可コード発行
- **Response Type別処理**: code, token, id_token, hybrid
- **動的scopeフィルタリング**: 認証方式・ACRベース

## モジュール構成

```
libs/
├── idp-server-core/                         # 認可コア
│   └── .../oauth/
│       ├── handler/
│       │   ├── OAuthRequestHandler.java    # リクエスト処理
│       │   └── OAuthAuthorizeHandler.java  # 認可処理
│       ├── request/
│       │   ├── AuthorizationRequest.java
│       │   └── AuthorizationRequestIdentifier.java
│       ├── response/
│       │   ├── AuthorizationResponse.java
│       │   ├── AuthorizationResponseCreator.java
│       │   └── AuthorizationResponseCreators.java
│       ├── validator/
│       │   └── OAuthAuthorizeRequestValidator.java
│       └── repository/
│           └── AuthorizationRequestRepository.java
│
├── idp-server-core/grant_management/        # Grant管理
│   ├── grant/
│   │   ├── AuthorizationCodeGrant.java
│   │   └── AuthorizationCodeGrantCreator.java
│   └── AuthorizationGrantedRepository.java
│
└── idp-server-control-plane/               # 管理API
    └── .../management/authorization/
```

## OAuthAuthorizeHandler

`idp-server-core/oauth/handler/OAuthAuthorizeHandler.java` 内の実際の実装:

```java
public class OAuthAuthorizeHandler {

    AuthorizationResponseCreators creators;
    AuthorizationRequestRepository authorizationRequestRepository;
    AuthorizationCodeGrantRepository authorizationCodeGrantRepository;
    OAuthTokenCommandRepository oAuthTokenCommandRepository;
    AuthorizationServerConfigurationQueryRepository authorizationServerConfigurationQueryRepository;
    ClientConfigurationQueryRepository clientConfigurationQueryRepository;
    AuthorizationGrantedRepository authorizationGrantedRepository;

    public AuthorizationResponse handle(OAuthAuthorizeRequest request) {

        Tenant tenant = request.tenant();
        AuthorizationRequestIdentifier authorizationRequestIdentifier =
            request.toIdentifier();
        User user = request.user();
        Authentication authentication = request.authentication();
        CustomProperties customProperties = request.toCustomProperties();
        DeniedScopes deniedScopes = request.toDeniedScopes();

        // リクエスト検証
        OAuthAuthorizeRequestValidator validator =
            new OAuthAuthorizeRequestValidator(
                authorizationRequestIdentifier,
                user,
                authentication,
                customProperties
            );
        validator.validate();

        // AuthorizationRequest取得
        AuthorizationRequest authorizationRequest =
            authorizationRequestRepository.get(
                tenant,
                authorizationRequestIdentifier
            );

        // Response生成（Response Type別）
        // AuthorizationResponseCreatorsが適切なCreatorを選択
        // ...
    }
}
```

**注意**: AuthorizationResponseCreatorsが、Response Type（code, token, id_token, hybrid）に応じた適切なCreatorを選択します。

## Authorization Code Grant生成

`idp-server-core/grant_management/grant/` 内:

```java
public class AuthorizationCodeGrantCreator {
    public AuthorizationCodeGrant create(
        AuthorizationGrant authorizationGrant,
        AuthorizationRequest authorizationRequest
    ) {
        // Authorization Code生成
        // AuthorizationGrantとAuthorizationRequestを紐付け
    }
}
```

## Response Type別処理

| Response Type | Creator | 説明 |
|---------------|---------|------|
| `code` | AuthorizationResponseCodeCreator | Authorization Code Flow |
| `token` | AuthorizationResponseTokenCreator | Implicit Flow (非推奨) |
| `id_token` | AuthorizationResponseIdTokenCreator | Implicit Flow |
| `code token` | Hybrid Flow Creator | Hybrid Flow |
| `code id_token` | Hybrid Flow Creator | Hybrid Flow |
| `code id_token token` | Hybrid Flow Creator | Hybrid Flow |

## E2Eテスト

```
e2e/src/tests/
├── spec/
│   ├── oidc_core_3_1_code.test.js          # Authorization Code Flow
│   ├── oidc_core_3_2_implicit.test.js      # Implicit Flow
│   ├── oidc_core_3_3_hybrid.test.js        # Hybrid Flow
│   └── rfc6749_4_1_code.test.js            # OAuth 2.0 Authorization Code
│
└── scenario/application/
    └── scenario-02-sso-oidc.test.js        # SSO認可シナリオ
```

## コマンド

```bash
# ビルド
./gradlew :libs:idp-server-core:compileJava

# テスト
cd e2e && npm test -- spec/oidc_core_3_1_code.test.js
cd e2e && npm test -- spec/oidc_core_3_3_hybrid.test.js
```

## トラブルシューティング

### Authorization Request検証失敗
- redirect_uriがクライアント登録済みURIと一致するか確認
- scopeが有効か確認
- Response Typeがクライアント設定と一致するか確認

### Authorization Code生成失敗
- AuthorizationGrantが正しく生成されているか確認
- ユーザー認証が完了しているか確認

### 同意画面が表示されない
- Grant管理の設定を確認
- 既存Grantが存在する場合は同意スキップ

