73
10

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.

Systemi(株式会社システムアイ)Advent Calendar 2023

Day 4

KeycloakのAPIでユーザー登録からアクセストークン取得までやってみる

Last updated at Posted at 2023-12-03

概要

2023年アドベントカレンダーへ2回目の投稿です。
カレンダーに空きがあり、所属している会社の「いいね」の合計の足しになればと思い、Keycloakについて投稿してみました。
なぜKeycloakかというと、認証・認可系の情報を読んでいるとKeycloakの名前がよく出てきていて、アップデートも頻繁にあることから、そろそろ業務でも使われそうな気がするので、このテーマにしました。
現状、Keycloakの記事は仕様や技術面など説明が多いので、この記事ではハンズオン形式で、とりあえず動かそうという感じです。
認証・認可は難しいので、広い心で読んでもらえるとありがたいです:bow_tone1:

Keycloakとは?

Keycloakとは、ID管理やアクセス管理のオープンソースソフトウェアで、認証認可サーバとして使うことができます。
同じようなサービスとしてAuth0やAmazon Cognitoがありますが、KeycloakはOSSですので費用の発生がなくコストパフォーマンスに期待でき、より柔軟なカスタマイズが可能ですが、冗長構成など非機能要件への対応や管理面は考慮が必要そうです。

詳細は、下記リンク先の公式ページを参考にして下さい。
https://www.keycloak.org/

ハンズオン

目標

この記事を実践すると下記の項目ができるようになります。

  • Keycloakの起動
  • KeycloakのAPIでユーザー登録
  • KeycloakのAPIでユーザーのアクセストークンの取得

ざっくりとユーザー登録と認証までという感じです。

前提

  • コンテナ実行環境(今回はDocker)は構築済み
  • APIテスター(今回はPostman)の使い方は問題ないこと

今回はコンテナ上でKeycloakを起動させますが、
Javaの実行環境が整っていればローカルでも起動できますので、
できそうなところで試してください。

あと設定などセキュリティ等へ考慮はしていませんので、
プロジェクトに導入する際は、その辺の対応はお願いいたします。

実践

1. Keycloakの起動

  1. docker-compose.ymlファイルを作成し、下記を記載する
    version: '3'
    services:
      keycloak:
        image: quay.io/keycloak/keycloak
        container_name: keycloak
        tty: true
        stdin_open: true
        ports:
          - "8080:8080"
        volumes:
          - ./data/keycloak:/opt/keycloak/data
        environment:
          KEYCLOAK_ADMIN: admin
          KEYCLOAK_ADMIN_PASSWORD: password
        command:
          - start-dev
    
  2. docker-compose up -d --buildコマンドでコンテナを起動させます
  3. ブラウザでhttp://localhost:8080に移動し、下図と同じ表示か確認します
    スクリーンショット 2023-12-03 1.37.08.png

    これでKeycloakが起動しました。
    ちなみにDBは、デフォルトでH2 Databaseですので、フレームワークはSpring Bootかなと。docker-compose.ymlvolumesのマウント先は、H2 Databaseのファイルですので、保存した内容を確認できます。

2. Realmの作成

  1. 上図のAdministration Consoleを押下すると下図のログイン画面に遷移するので、docker-compose.ymlにてKEYCLOAK_ADMINの値をUsernameに、KEYCLOAK_ADMIN_PASSWORDの値をPasswordに入力してサインインを押下する
    スクリーンショット 2023-12-03 6.05.58.png

  2. サイドバーの「master」から「create reaml」ボタンを押下し、Reamlの登録ページに遷移する
    スクリーンショット 2023-12-03 6.14.53.png

  3. Reamlの名前に「test-reaml」と入力し、「Create」を押下する
    スクリーンショット 2023-12-03 6.19.15.png

これでReamlが作成されます。
そもそもReamlとは、「部門」のような意味でReaml毎にユーザーやロールを管理しています。

3. Clientsの作成

  1. サイドバーの「Clients」からClients一覧画面に遷移し、「Create Client」ボタンを押下し、「Create Client」画面に遷移する
    スクリーンショット 2023-12-03 6.37.49.png

  2. 「Client ID」の値に「test-client」を入力し、「Next」を押下する
    スクリーンショット 2023-12-03 6.42.52.png

  3. 「Client authentication」と「Authorization」をONにし、下図の設定であることを確認し、「Next」を押下する
    スクリーンショット 2023-12-03 6.45.18.png

  4. 今回は試行レベルなので、下図のように特に値を入力せず「Save」を押下し、一覧に「test-client」が作成されていることを確認する
    スクリーンショット 2023-12-03 6.48.02.png

  5. 「test-client」の詳細にて「Credentials」ページ内の「Client Secret」の値を控えておく(リクエスト時に必要なので)
    スクリーンショット 2023-12-03 6.53.06.png

そもそも、「Client」とは、公式ドキュメントに

Keycloakにユーザーの認証を要求できるエンティティーです。

と記載されていますが、、、ざっくりとしていて分かりにくい。認証時に必要な設定をあれこれできるところかなと思っています(違っていたら教えてください:bow_tone1:

3. ユーザー登録(Postman使用)

  1.  下図を参考に、下記設定のリクエストでアクセストークンを取得し、その値を控えておく

スクリーンショット 2023-12-03 7.06.03.png
2. 下記設定のリクエストでユーザーを登録し、Usersにて「test-user」の存在を確認する

スクリーンショット 2023-12-03 7.21.50.png

{
    "credentials": [
        {
            "temporary": false,
            "type": "password",
            "value": "test-password"
        }
    ],
    "username": "test-user",
    "firstName": "test",
    "lastName": "user",
    "email": "test-user@test.com",
    "emailVerified": false,
    "enabled": true
}

スクリーンショット 2023-12-03 7.25.29.png

とりあえずユーザーの登録はできていますね〜

4. 登録したユーザーのアクセストークンを取得(Postman使用)

  1. 下図を参考に、下記設定のリクエストでアクセストークンを取得する

スクリーンショット 2023-12-03 7.32.16.png

アクセストークンを取得できていますね。
とりあえず、こんな感じかなと。

最後に

まだまだKeycloakについての情報は少なく、「なぜ」に対しての追求がまだまだできていませんが、この記事では「リクエストを投げたら値がちゃんと返ってきた〜」という風に楽しんでもらえればなぁと思います。

それにしても認証認可は本当に難しい、、、実務で認証認可の実装をしたことがありますが、ライブラリやフレームワークに頼っている箇所が多く、「本当に仕組みを理解しているか」と言われると全然です。バリエーションも多く進化も早いので、置いていかれないように頑張って勉強ですね。

この記事についてご指摘がありましたら、コメントにてお願いいたします:bow_tone1:

73
10
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
73
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?