
Ory Hydraで運営しているAPI提供サーバーにDeveloper portalを用意する
Ory Hydraに専用のscopeを用意して、それを経由してアクセスすることで、既存の仕組みを使いながらデベロッパーポータルサイトを構築することができる
前回のブログで、Ory Hydra をつかって、APIを提供する仕組みを作った。しかし現状のままでは各開発者にIDを渡すために、Hydraサーバーに対して、毎回コマンドを叩く必要がある。
そのため、開発者がアプリケーションのcallbackや名前等を自由に編集するDeveloper portalページを用意した。
https://bfh-developer-portal-front.vercel.app/

このWebサイトはブレイブフロンティアヒーローズのプライム会員でないと利用できないようになっている。
手法としては、OryHydraに対して、developer portal用のClientを発行する。Scopeにdeveloper:adminを追加する。
--scope openid,profile,offline_access,developer:admin \
APIサーバーによるClientのCRUD操作はdeveloper:admin権限を要求するようにする。また、新たにdeveloper:adminをもつClientを作れないように制御している。そして、上で述べたように、元のゲームでの利用権限もチェックすることでユーザーの正当性を確認している。
graph TB
subgraph Public_Internet [パブリックインターネット]
Dev((開発者))
Portal[Developer Portal Front-end<br/>Vercel]
end
subgraph AWS_Private_Network [AWS プライベートネットワーク]
API[API Server<br/>CRUD操作 / 権限チェック]
Hydra[Ory Hydra<br/>OAuth2/OIDC Server]
GameDB[(Game Server / DB)]
end
Dev -- アクセス --> Portal
Portal -- 1. ログイン/認可要求<br/>scope: developer:admin --> Hydra
Portal -- 2. Client操作要求<br/>(Bearer Token付) --> API
API -- 3. 会員ステータス確認 --> GameDB
API -- 4. Client CRUD実行<br/>(ownerタグ付与) --> Hydra
style AWS_Private_Network fill:#f9f,stroke:#333,stroke-width:2px
style Public_Internet fill:#fdf,stroke:#333,stroke-dasharray: 5 5
sequenceDiagram
autonumber
actor Developer as 開発者
participant Portal as Portal (Front)
participant Hydra as Ory Hydra
participant API as API Server
participant Game as Game Server
Developer->>Portal: ログイン (OAuth2 Flow)
Portal->>Hydra: 認可リクエスト (scope: developer:admin)
Hydra-->>Developer: ログイン/同意画面
Developer->>Hydra: 承認
Hydra-->>Portal: Access Token (developer:admin保持)
Note over Developer, Portal: 開発者ポータル利用開始
Developer->>Portal: 新規Client作成要求 (名前, Callback等)
Portal->>API: Client作成リクエスト (Token + 入力内容)
API->>API: 1. scope 'developer:admin' の検証
API->>Game: 2. プライム会員かチェック
alt 正当なユーザー
API->>Hydra: 3. Client作成 (POST /admin/clients)
Note right of Hydra: --owner 'ユーザーID'<br/>--scope 'openid,profile...'
Hydra-->>API: 201 Created
API-->>Portal: 作成完了通知
Portal-->>Developer: Client ID / Secret 表示
else 不正/非会員
API-->>Portal: 403 Forbidden
end
これによって、OryHydraとAPIサーバーを利用してDeveloper Portalページを作成することができ、3rdパーティー開発者が自由に開発を行えるようになる。
開発者が作ったClientをポータルサイトで一覧で取得できるようにclient作成時にはownerを付与する(実際にはAWS上のプライベートネットワーク内でAPIを叩いて実行している)
--owner '一意のユーザーID' \
Ory Hydraを使うことで、自己増殖するかのように便利ツールを増やしていけるのはヘッドレスな構造ならではといったところ。
現状はやらなきゃいけないことなどが無限にあるため、引き続き開発者向けの便利な仕組みを構築していきます。