Hydra のデータベースを構築して定義を見てみる
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_oauth2_consent_request
hydra から同意画面に遷移する際のリクエストを管理?(同意処理で hydra に通知される同意結果の検証に使ってる気がする)
hydra_oauth2_consent_request_handled
同意リクエストに対する処理の結果?
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 関連
- クライアント
Discussion