💪

APIファーストなユーザー管理システム ory/kratosのデータベーススキーマを見てみる

2021/11/06に公開

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にします

https://www.ory.sh/kratos/docs/quickstart

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

image

スキーマの完全版はgistに貼ってます

まとめ

ory/kratosを使わない場合でも、ユーザー管理システムを作る際の参考になると思います

Discussion