🔐

ZITADEL を IdP としてローカルでの OIDC 開発環境を整える

2024/01/29に公開

はじめに

OpenID Connect の Relying Party を実装するとき、ローカル環境で閉じて開発したくないですか?
私はしたいです。
Google などでプロジェクトを用意してもよいですが、なんだかんだめんどくさいです。

今回は ZITADEL という OSS の認証基盤を用いてローカルマシンでの開発環境を構築してみたのでご紹介します。

https://zitadel.com/

docker compose

ZITADEL はクラウドサービスとしても提供が行われていますが、セルフホスティングによるサービス提供も行えます。

https://zitadel.com/docs/self-hosting/deploy/overview

本記事による開発環境を整える方法としては Docker Compose を選択します。

https://zitadel.com/docs/self-hosting/deploy/compose

compose.yaml のサンプルコードが提供されているのでそれを使います。

開発をより楽にするために Docker compose with service account に記載されている yaml ファイルを活用します。
ちゃんと検証していないですが、各APIを実行するための認証情報をファイルにて出力するようにします。

開発に必要なデータを準備

OIDC の開発環境を実装する上で最低限必要な要素は以下の2つです。

  • OIDC RP の作成/登録
    • client_id
    • client_secret
  • 動作確認用ユーザーの作成
    • メールアドレス
    • パスワード

これらのデータはコンソール画面から admin アカウントでログインすることで作成できます。

... が、正直めんどくさ過ぎます。
私は作業の度に Docker 環境を構築し破棄するようなサイクルで実装する人間です。
マウントとかもあんまりちゃんと設定しないです。
となるともっと手軽に OIDC RP とアカウントは作成したくなります。

どうするか、CLI をちゃちゃっと作りました。

それぞれ、どうやって作ったか。
正直、公式サイトのドキュメントを眺めてもよくわからなかったので Go のコードを追いつつ手を動かて実装しました。

実装

実装サンプルを探すために公式サイトを漁っていたところ以下のページに辿りつきました。

https://zitadel.com/docs/examples/secure-api/go

上記ページを書くにしていると v3 バージョンへの参照へと辿り着きます。

https://github.com/zitadel/zitadel-go/tree/next

こちらの example ディレクトリを参考に手を動かします。

OIDC RP の作成/登録

https://github.com/otakakot/sample-zitadel-develop/blob/main/cmd/oidcrp/main.go

任意の値を用いて client_idclient_secret を設定したかったのですがAPIを眺めている感じだとできなそうでした ...

動作確認用ユーザーの作成

https://github.com/otakakot/sample-zitadel-develop/blob/main/cmd/user/main.go

おわりに

2つの CLI を用いて OIDC RP の作成/登録および動作確認用のユーザーの作成を行いました。
もうちょっと自動化できるところはあると思いますが、それはもう少し触ってみて困ったら調整します。

今回実装したコードは以下に置いておきます。

https://github.com/otakakot/sample-zitadel-develop

ちなみに、OSS の認証ミドルウェアとして有名な KEYCLOAK もコンテナイメージが提供されており同じようなことが可能かと思います。

https://www.keycloak.org/

ローカル環境で KEYCLOAK を立て OIDC RP を接続させることには成功しましたが、今回紹介したような RP の設定や 動作確認用ユーザーの作成をいい感じに設定できず挫折しました ...

https://www.keycloak.org/operator/realm-import

Discussion