💪
APIファーストなユーザー管理システム ory/kratosのデータベーススキーマを見てみる
ory/kratosとは?
公式ドキュメントによると
Ory Kratos
は、クラウドアーキテクチャのベストプラクティスに基づいて構築された、APIファーストのアイデンティティおよびユーザー管理システムです。
ほとんどすべてのソフトウェアアプリケーションが対応する必要のあるコアユースケースを実装しています。
基本的な機能としては以下があるようです
- セルフサービス型のログインと登録。エンドユーザーが、Username / Emailとパスワードの組み合わせ、Social Sign In(「GoogleやGitHubでサインイン」)、Passwordless flowなどを使って、アカウント(アイデンティティと呼びます)を作成し、サインインできるようにします。
- 多要素認証(MFA/2FA)。TOTP(RFC 6238およびIETF RFC 4226 > - Google Authenticatorとして知られる)などのプロトコルをサポートします。
- アカウント認証。メールアドレス、電話番号、住所などが本人のものであるかどうかの確認。
- アカウントの復旧。"パスワードを忘れた場合"のフロー、セキュリティコード(MFAデバイスを紛失した場合)などを使用してアクセスを復旧する。
- プロファイルとアカウントの管理。安全なフローを使用して、パスワード、個人情報、電子メールアドレス、リンクされたソーシャルプロファイルを更新します。
- 管理者用API。アイデンティティのインポート、更新、削除
コンパイルされたバイナリには、システム、ライブラリ、またはファイルの依存関係がなく 、たとえば、生のLinuxカーネル上で単一の静的バイナリとして実行できます。バイナリイメージとDockerイメージのサイズはそれぞれ20MB未満です
Ory Kratosは、手間をかけずに水平方向にスケーリングします。唯一の外部依存関係はRDBMSです。現在、SQLite、PostgreSQL、MySQL、CockroachDBをサポートしています。Ory Kratosをスケーリングするために、memcachedなどのシステムやその他のシステムは必要ありません。
試してみた
今回はPostgreSQLとdocker-compose
で試してみます
クイックスタートに手順があります
kratosのバージョンは最新のv0.8.0-alpha.3
にします
git clone https://github.com/ory/kratos.git
cd kratos
git checkout v0.8.0-alpha.3
docker-compose -f quickstart.yml -f quickstart-standalone.yml -f quickstart-postgres.yml up --build --force-recreate
kratos-kratos-1 | time=2021-11-05T03:52:34Z level=info msg=Starting the admin httpd on: 0.0.0.0:4434 func=github.com/ory/kratos/cmd/daemon.ServeAdmin file=/home/ory/cmd/daemon/serve.go:164 audience=application service_name=Ory Kratos service_version=v0.8.0-alpha.3
kratos-kratos-1 | time=2021-11-05T03:52:34Z level=info msg=TLS has not been configured for public, skipping func=github.com/ory/kratos/driver/config.(*Config).getTSLCertificates file=/home/ory/driver/config/config.go:1088 audience=application service_name=Ory Kratos service_version=v0.8.0-alpha.3
kratos-kratos-1 | time=2021-11-05T03:52:34Z level=info msg=Starting the public httpd on: 0.0.0.0:4433 func=github.com/ory/kratos/cmd/daemon.ServePublic file=/home/ory/cmd/daemon/serve.go:116 audience=application service_name=Ory Kratos service_version=v0.8.0-alpha.3
普通に動きました
ER図
schemaspyでER図を生成してみる
docker run -v "$PWD/schema:/output" --net="host" -u root:root schemaspy/schemaspy:snapshot -t pgsql -host localhost:5432 -db kratos -u kratos -p secret -connprops useSSL\\\\=false -all
スキーマの完全版はgistに貼ってます
まとめ
ory/kratosを使わない場合でも、ユーザー管理システムを作る際の参考になると思います
Discussion