目次
- 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のサンプルクライアントアプリ登録する時にも、変更後ポート番号で登録すること。
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
認証アクセス設定
Keycloakにアプリを登録しアクセストークンを取得し、それを使って認証アクセスを試す。
①Keycloakにてクライアントアプリを追加する。
②アクセストークンを指定してAPI実行
② -1)Client Secretsの取得
Keycloakのクライアントアプリの[Credentials]の[Secret]をコピーする。
② -2)【Postmanで実行する場合】アクセストークンを指定してAPI実行
② -2)i)アクセストークンの取得
POSTと「http://localhost:8088/auth/realms/realm1/protocol/openid-connect/token 」と3つのパラメータを設定して実行するとアクセストークンが取得出来る。
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実行する。
② -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名]"
② -3)ii)アクセストークンを指定してAPI実行すると、実装内容が確認出来るようになる。
スコープによるアクセストークン発行
こちらは、スコープによりアクセストークンを発行しAPIを実行する事になる。
スコープのトークンによるAPI実行を参照してください。
ユーザーによるアクセストークン発行
こちらは、ユーザーによりアクセストークンを発行しAPIを実行する事になる。
ユーザーのトークンによるAPI実行を参照してください。