1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

KeyCloakについて

Last updated at Posted at 2022-10-17

業務でAPIサーバーをJava, SpringBootで作成した時、認証・認可サーバーとしてKeyCloakを使用しました。その際、学んだことを備忘録としてここに残しておきます。

【KeyCloakとは何なのか?】
1.KeyCloakとは、シングルサインオンやAPIアクセスの認証・認可制御を実現する、Javaベースのアイデンティティ・アクセス管理ソフトウェアです。

【KeyCloakをなぜ使うのか?】
1.ユーザーのデータを利用したいクライアントアプリケーションと、ユーザーデータを管理するリソースサーバーがあったとします。イメージとしては、フロントエンドがクライアントアプリケーション、バックエンドがリソースサーバーに該当します。
image.png

2.クライアントアプリケーションは、エンドポイントにアクセスしてAPIと必要なデータをやり取りします。しかし、このままではクライアントが悪意のある第三者だとしても、リソースサーバーはユーザーデータを渡してしまいます。結果として、ユーザーデータの流出やデータベースの改ざんなどの、様々な問題が発生する恐れがあります。
image.png

3.その問題を解決するため、OpenIDプロバイダーが発行するIDトークンを導入します。
KeyCloakはこのOpenIDプロバイダーに該当します。また、IDトークンとはユーザー認証情報を含む改ざん検知用の署名付きトークンのことを指します。
image.png

4.クライアントアプリケーションがリソースサーバー内のユーザーデータを取得するまでの実際の流れを見ていきます。まず最初に、クライアントアプリケーションがOpenIDプロバイダーに対してIDトークンを要求します。
image.png

5.すると、OpenIDプロバイダーはクライアントアプリケーションにIDトークンを与えるかどうかユーザーに確認します。
image.png

6.IDトークンを発行するため、ユーザーは本人確認情報の提示をすることでユーザー認証を行います。
image.png

7.ユーザー認証が適切に行われた場合、OpenIDプロバイダーはクライアントアプリケーションに IDトークンを発行します。
image.png

8.クライアントアプリケーションはリソースサーバーにユーザーデータを要求する際、OpenIDプロバイダーが発行したIDトークンを提示します。
image.png

8)リソースサーバーは、リクエストに含まれているIDトークンを取り出し、IDトークンが改ざんされていないか検証します。ここで、クライアントアプリケーションからのリクエストはOpenIDプロバイダーが認証したユーザーによるものか、認証されたユーザーがユーザーデータにアクセスするのに必要な認可情報を持っているか確認します。
image.png

9)ユーザーデータにアクセスするための認証・認可情報を所持していることを確認できた場合、ユーザーデータをクライアントアプリケーションに渡します。
image.png

10)なぜKeyCloakが必要かという疑問でしたが、「OpenIDプロバイダーとしてKeyCloakを導入することでAPIアクセスの認証・認可制御を実現できるから」ということになります。リソースサーバーをAPIとして公開するためには、誰がアクセスしてきたのかを確認するための「認証」と、APIへのアクセスを誰に許可するのかという「認可」の仕組みが必要不可欠となります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?