💋

Hydra のデータベースを構築して定義を見てみる

2021/07/30に公開

Hydra

https://github.com/ory/hydra

以下 README.md の引用です。

ORY Hydra is a hardened, OpenID Certified OAuth 2.0 Server and OpenID Connect Provider optimized for low-latency, high throughput, and low resource consumption. ORY Hydra is not an identity provider (user sign up, user login, password reset flow), but connects to your existing identity provider through a login and consent app. Implementing the login and consent app in a different language is easy, and exemplary consent apps (Node) and SDKs for all common languages are provided.

本記事では Hydra のデータベース定義を見てみます。

Hydra のバージョン

hydra version
Version:    v1.10.3
Git Hash:   ea931581eb54ab5dc142ea1f81357f25b8e4156a
Build Time: 2021-07-14T14:42:23Z

データベースの構築

構築したデータベースの定義を見るため、データーベースを構築します。
Hydra では PostgreSQL、MySQL、SQLite をサポートしています。(ベータ版として CockroachDB もサポートしています)
ここでは PostgreSQL を利用します。

Docker で PostgreSQL を立てて Hydra 用のテーブルを作成します。

docker run -p 5432:5432 --name hydra-postgres -e POSTGRES_PASSWORD=pass -d postgres
psql -h localhost -p 5432 -U postgres
create database hydra;

Hydra の CLI をインストールします。

brew tap ory/hydra
brew install ory/hydra/hydra

CLI でテーブルを作成します。

hydra migrate sql postgres://postgres:pass@localhost:5432/hydra

テーブルが作成されました。

psql -h localhost -p 5432 -U postgres -d hydra
Password for user postgres: 
psql (13.3)
Type "help" for help.

hydra=# \dt
                             List of relations
 Schema |                      Name                      | Type  |  Owner   
--------+------------------------------------------------+-------+----------
 public | hydra_client                                   | table | postgres
 public | hydra_jwk                                      | table | postgres
 public | hydra_oauth2_access                            | table | postgres
 public | hydra_oauth2_authentication_request            | table | postgres
 public | hydra_oauth2_authentication_request_handled    | table | postgres
 public | hydra_oauth2_authentication_session            | table | postgres
 public | hydra_oauth2_code                              | table | postgres
 public | hydra_oauth2_consent_request                   | table | postgres
 public | hydra_oauth2_consent_request_handled           | table | postgres
 public | hydra_oauth2_jti_blacklist                     | table | postgres
 public | hydra_oauth2_logout_request                    | table | postgres
 public | hydra_oauth2_obfuscated_authentication_session | table | postgres
 public | hydra_oauth2_oidc                              | table | postgres
 public | hydra_oauth2_pkce                              | table | postgres
 public | hydra_oauth2_refresh                           | table | postgres
 public | schema_migration                               | table | postgres
(16 rows)

SchemaSpy でスキーマを出力します。

docker run -v "$PWD/schema:/output" --net="host" schemaspy/schemaspy:snapshot -t pgsql -host localhost:5432 -db hydra -u postgres -p pass

テーブル定義

画像はすべて SchemaSpy によって出力されたものです。

hydra_client

作成したクライアントの設定情報?

hydra_jwk

Hydra 自体が提供する JWK?

hydra_oauth2_access

アクセストークン?(トークン発行したり Revoke したりするとレコード数が増減する)

hydra_oauth2_authentication_request

hydra への認可リクエスト?(ログイン処理で hydra に通知される認証結果の検証に使ってる気がする)

hydra_oauth2_authentication_request_handled

認可リクエストに対するログイン処理の結果?

hydra_oauth2_authentication_session

hydra_oauth2_code

認可コード?

hydra から同意画面に遷移する際のリクエストを管理?(同意処理で hydra に通知される同意結果の検証に使ってる気がする)

同意リクエストに対する処理の結果?

hydra_oauth2_jti_blacklist

金された JWT を管理?

hydra_oauth2_logout_request

hydra_oauth2_obfuscated_authentication_session

hydra_oauth2_oidc

hydra_oauth2_pkce

PKCE 関連の何か?(PKCE ありの認可リクエストをするとレコードが登録される)

hydra_oauth2_refresh

リフレッシュトークン?

schema_migration

マイグレーションの管理用?

感想

  • 大雑把に以下を管理するためのテーブルがあるっぽい
    • 認可リクエストからの一連のトランザクション
    • 発行したトークン類
    • JWT 関連
    • クライアント
GitHubで編集を提案

Discussion