0
0

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.

Docker, Keycloakを利用しアクセストークンを指定してAPI実行する

Last updated at Posted at 2021-01-15

目次

  • DockerからKeycloak起動
  • ポート変更方法
  • Keycloakのクライアントアプリとユーザーアカウントの登録
  • Spring BootのREST APIの作成
  • リソースサーバー設定:認可サーバーの設定
  • 認証アクセス設定
  • アクセストークンを指定してAPI実行
  • スコープによるアクセストークン発行
  • ユーザーによるアクセストークン発行
  • アクセストークンの内容確認
  • ユーザー情報確認

参考サイト

DockerからKeycloak起動

DockerとKeycloakで世界最速OpenID Connectの為、DockerからKeycloakを実行する事にする。
参考サイト:https://www.keycloak.org/getting-started/getting-started-docker

docker run -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:12.0.1
  • ポート変更後は以下になる。
docker run -p 8088:8088 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:12.0.1

ポート変更方法

他のアプリとポート番号被ると困るので、ポート番号を8088に変更する。

docker run -p 8088:8088 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:12.0.1 -Djboss.http.port=8088

Keycloakのクライアントアプリとユーザーアカウントの登録

  • この Link にて、Keycloakの操作を確認し、クライアントアプリとユーザーアカウントの登録を行う。
    ※上記でポート番号変更している為、Keycloakのリンクのポート番号も上記通り[8088]になります。
    ログインユーザーは[admin/admin]になる。
  • Keycloakのサンプルクライアントアプリ登録する時にも、変更後ポート番号で登録すること。
    image.png

Spring BootプロジェクトにSpring Securityを導入したREST APIの作成

この Link の通り、REST APIを作成する。

ここまでで、API実行するとログインが必要になる。その為以降の手順として、ログインしないでアクセストークンを利用してAPI実行出来るようにする。

リソースサーバー設定:認可サーバーの設定

  • 上記で作成したプロジェクトのapplication.propertiesに認可サーバー情報を設定する。
application.properties

# 認可サーバーのIssuer Identifier
spring.security.oauth2.resourceserver.jwt.issuer-uri= http://localhost:8088/auth/realms/realm1
  • API実行すると[401=Unauthorized]になる。この状態は正常な動作である。
    image.png

認証アクセス設定

Keycloakにアプリを登録しアクセストークンを取得し、それを使って認証アクセスを試す。

①Keycloakにてクライアントアプリを追加する。

image.png

  • 以下を設定し保存する。

    Access Type=Confidential

    Authorization Enabled=ON

    image.png

②アクセストークンを指定してAPI実行

② -1)Client Secretsの取得
Keycloakのクライアントアプリの[Credentials]の[Secret]をコピーする。

image.png

② -2)【Postmanで実行する場合】アクセストークンを指定してAPI実行
② -2)i)アクセストークンの取得
POSTと「http://localhost:8088/auth/realms/realm1/protocol/openid-connect/token 」と3つのパラメータを設定して実行するとアクセストークンが取得出来る。

image.png

Response: 
{
    "access_token": "xxxxxxxxxxxxx",
    "expires_in": 300,
    "refresh_expires_in": 0,
    "token_type": "Bearer",
    "not-before-policy": 0,
    "scope": "profile email"
}

※アクセストークン内容確認はこの Link にて確認出来る。の中身を見る

② -2)ii)アクセストークンを指定してAPI実行すると、実装内容が確認出来るようになる。
※アクセストークンが期限切れた場合は、[401=Unauthorized]になる事もある。この場合は再度アクセストークンを取得し、API実行する。
image.png

または
image.png

② -3)【エンドポイントで実行する場合】アクセストークンを指定してAPI実行
② -3)i)アクセストークンの取得

curl -X POST "http://localhost:8088/auth/realms/[作成したrealm名]/protocol/openid-connect/token" --data "grant_type=client_credentials&client_secret={コピーしたClient Secrets}&client_id=[作成したclient名]"

image.png

② -3)ii)アクセストークンを指定してAPI実行すると、実装内容が確認出来るようになる。
image.png

スコープによるアクセストークン発行

こちらは、スコープによりアクセストークンを発行しAPIを実行する事になる。
スコープのトークンによるAPI実行を参照してください。

ユーザーによるアクセストークン発行

こちらは、ユーザーによりアクセストークンを発行しAPIを実行する事になる。
ユーザーのトークンによるAPI実行を参照してください。

アクセストークンの内容確認

ユーザー情報確認

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?