本記事は以下の記事を参考に、Keycloak×SpringSecurityによるOIDC実装を行った過程を備忘録として記事にしたものです。
参考: Keycloak×Spring SecurityでOIDC入門
OIDCとは
OIDCとは OpenID Connect の略で、認可が目的だったOAuth2.0を拡張して認証も行えるようにした標準プロトコルです。
この仕様では、認証認可に使用するトークンの生成や受け渡しなどのフローを定められており、これに沿って認証認可を実現します。
ユーザーがアプリにログインすると、そのアプリは認証クライアントとして認証サーバーに認証を要求します。認証サーバーはユーザー認証を行い、IDトークンを発行してクライアントに返します。このIDトークンは、アクセスするための認証情報のことです。認証クライアントとなるアプリをRP(Relying Party)、認証を行うサービスをOP(OpenID Provider)といいます。
Keycloakについて
Keycloakはオープンソースのソフトウェア(Identity Provider:idp)で、OIDCなどの標準プロトコルを実装しています。これによってシングルサインオンやAPIアクセスの認証・認可制御を実現できます。
ここからはKeycloakで認証サーバーを立てて、Spring Securityで保護されたアプリケーションの認証処理を実装していきます。
Keycloakの構築
dockerでコンテナとして起動
管理コンソールで設定
クライアントとなるアプリ(=認証したいアプリ)やユーザーの設定を行う。
レルム(Realm)
レルムは同一の認証情報やセキュリティ設定などが適用される範囲、同じ認証情報でシングルサインオンできる範囲です。クライアントとなるアプリやユーザーはレルム毎に設定することができます。
デフォルトで「master」という全てのレルムを包含して管理することができる特殊なレルムがあります。
「master」レルムはレルム内で最も高いレベルで、管理者(初回起動時に作成した管理者アカウント、ここでは環境変数で指定したアカウント)で管理できます。
まずはレルムを作成します。
管理コンソール左上のレルム名のプルダウン中の「Create Realm」ボタンから作成します。
任意のレルム名を設定します。(例:test-blog-app)
次に、クライアントとなるアプリを設定します。
左メニューの「clients」でクライアントの一覧を開き、「Create client」ボタンから設定します。
クライアントIDに任意の名前を設定(例:test-blog-app)、OIDCをするので、「Client type」が「OpenID Connect」になっていることを確認します。また、クライアントの身元証明を行うためにclient authenticationにチェックを入れます。
クライアントの一覧から作成したクライアント(demo-app)を開き、Keycloakで認証した後にリダイレクト可能なURIを設定します。(例:http://localhost:8080/)
ユーザーを作成します。
左メニューの「user」でユーザーの一覧を開き、「Create new user」ボタンから作成します。
任意の「ユーザー名」を入力(例:test-blog-app-user)して作成します。
パスワードを設定するため、ユーザー一覧から作成したユーザーを開き、「Credentials」タブから設定します。
ここでTemporaryにチェックを入れると初回ログイン時にパスワード変更を要求されるようになります。
次回の予定
次回の記事では、Spring Securityの設定していきます。現在、実装中ですので、完了次第記事にします。