【Keycloak】OAuth2.0でAPI利用を認可するための設定を紹介
はじめに
Webやモバイルのアプリケーションは、セキュリティの観点から、API利用に認可の仕組みを入れる必要があります。
この記事では、認可サーバにKeycloakを採用し、OAuth2.0でAPI認可を行うための設定を紹介します。
※ クライアントアプリケーションとリソースサーバの実装については、ここでは扱いません。
対象読者
APIに認証・認可の仕組みを入れたい方、Keycloakをこれからシステムに取り入れようと考えている方。
Keycloakって何?
Keycloakは、システムに認証・認可の仕組みを組み込むことができるオープンソースのソフトウェアです。
最新版は、21.0.0です。(2023/3/1時点)
システム構成
以下のシステム構成を採用したWebアプリケーションをローカルで動かす前提で説明していきます。
- クライアント
- ホスト: localhost
- ポート: 3000
- 例: ReactやVueで実装されたSingle Page Applicationなど
- 認可サーバ
- ホスト: localhost
- ポート: 8080
- リソースサーバ
- ホスト: localhost
- ポート: 8001
- 例: RESTfulなAPIなど
API利用を認可するまでの流れ
Webアプリケーションを開いてから、クライアントを認可して、リソースサーバからデータ取得するまでの流れをシーケンス図にしました。
OAuth2.0でいう認可コードフローで実装した場合の一例です。
Keycloakの基本用語
Keycloakを利用するために、基本用語を抑えておきましょう。
-
Realm(レルム)
ユーザーやクライアント、ロールを一つのまとまりとして管理する単位のことです。 -
Clients(クライアント)
Keycloakが認証・認可を行うサービスを登録します。 -
Roles(ロール)
レルムごとの権限とクライアントごとの権限を設定します。
ロールによって、認可を振り分けます。
Keycloakの立ち上げ
Keycloakサーバを立ち上げます。
下記のコマンドで、管理者ユーザーも同時に作成しています。
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:21.0.0 start-dev
http://localhost:8080/ にアクセスするとこの画面が表示されます。
Keycloakの設定
サインイン
- Administration ConsoleからSign inを行います。
レルムの作成
- サイドメニューの「Create Realm」から、レルムを作成します。
ここでは、レルム名をSampleに設定しています。
クライアントの作成
リソースサーバの設定
-
「Create Client」からクライアント作成画面に遷移します。
-
リソースサーバの設定を行います。
-
「Client Authentication」をOnにして、Standard flowにチェックをつけます。
「Standard flow」がOAuth2.0で推奨される認可コードフローになります。
リソースサーバ側の設定が完了しました。
クライアントアプリケーションの設定
クライアントアプリケーションも登録する必要があるのですが、バックエンドのサービスと設定項目が異なる部分を紹介します。
-
ブラウザで動くアプリは安全にシークレット情報を保管できないので、「Client authentication」をOFFにします。
-
valid_redirect_uriにアクセストークンを受け取るURIを指定します。
これで、クライアントはすべて作成完了です。
ユーザーの作成
APIを利用するユーザーの作成を行います。
ロールの作成
Keycloakのクライアントロールを利用して、API利用を認可する権限を分別します。
- 先ほど作成した「Test」クライアントのRolesタブで、ロールを作成しておきます。
リソースサーバで、この「TestUserRole」がアクセストークンに含まれていた場合、
/hogeエンドポイントへのリクエストを許可する という実装にしておきます。
ユーザーとロールの紐付け
-
先ほど作成した「ユーザーa」のRole Mappingタブを開きます。
-
Assign Roleから、クライアントロールでフィルターをかけます。
-
「TestUserRole」を選択してユーザーにアサインします。
これで設定は完了です。
Keycloakの設定は完了です、APIの認可処理を組み込むことができました。
まとめ
クライアントアプリケーションとリソースサーバの実装は、説明が長くなるので割愛しました。
API利用のための認可サーバの設定は、上記の流れで行うことができます。
Keycloakは設定項目が細かくあるので、実際のプロダクトに利用するときは、カスタマイズしましょう。
参考文献
Discussion