環境設定¶
レルムの作成¶
左上部にある「Master」の右側にあるアイコンをマウスのカーソルを当てます。
「レルムの追加」を押下します。
名前を設定します。(今回の場合はsnowsaber-exsample)
作成を押下します。
以上でレルムの作成は完了です。
クライアントの作成¶
右のメニューの「クライアント」を押下します。
「クライアントiD」にidを設定しいます。
今回はサンプルとして「exsample-app」を設定しています。
以上でクライアントの作成は完了です。
ロールの作成¶
メニューの「ロール」を押下します。
「ロールの追加」を押下します。
「ロール名」を入力し、「保存」を押下します。
今回は「admin-role」を設定してします。
以上でロールの作成は完了です。
ユーザの作成¶
メニューの「ユーザ」を押下します。
「ユーザ名」を入力し、「保存」を押下します。
今回は「admin-user」を入力します。
「ロールマッピング」タブを選択します。
「使用可能なロール」より所属するロールを選択し、「選択したものを追加」を選択します。
今回は「admin-role」を選択します。次にユーザのパスワードを設定します。「クレデンシャル」タブを選択します。
下部にある「Set Password」の「パスワード」「新しいパスワード(確認)」を入力し「一時的」を「オフ」に設定します。
以上でユーザの作成は完了です。
クライアントとロールの紐付け¶
作成したユーザと利用するクライアントを紐付けます。
クライアントの「設定」タブよりアクセスタイプを「confidential」に変更します。
次に以下の内容を変更し、保存ボタンを押下します。
サービスアカウントの有効 : オン
有効なリダイレクトURI : 対象のシステムのログイン画面のURI(今回のサンプルではlocalhostを設定)
次に「サービスアカウントロール」タブを選択します。
「使用可能なロール」より利用するロールを選択します。
以上でクライアントとロールの紐付けは完了です。
アクセストークンの発行¶
認証用のトークンを発行し動作を確認します。
クライアントの「クレデンシャル」タブを開きます。
シークレット部分をコピーします。
クライアントIDおよびシークレットを以下の形式としbase64にエンコードします。
以下のリクエストをkeycloakのサーバに送信します。
URL
http://${host}:${port}/auth/realms/${realm}/protocol/openid-connect/token
header
Authorization: Basic {クライアントid:シークレットのbase64の値}Content-Type: application/x-www-form-urlencodeddata
以下の内容を「&」で繋ぎます。
grant_type : passwordusername : ユーザidpassword : パスワード送信サンプル
POST http://192.168.56.110/auth/realms/snowsaber-exsample/protocol/openid-connect/token Authorization: Basic ZXhzYW1wbGUtYXBwOmFlMjc0MzM2LTAzOWYtNDY4OS04YjZhLWM4ZDA3NWEyZTNlNw== Content-Type: application/x-www-form-urlencoded grant_type=password&username=admin&password=admin
成功時のレスポンス例
HTTP/1.1 200 OK Cache-Control: no-store Set-Cookie: KEYCLOAK_LOCALE=; Version=1; Comment=Expiring cookie; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; Path=/auth/realms/snowsaber-exsample/; HttpOnly,KC_RESTART=; Version=1; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; Path=/auth/realms/snowsaber-exsample/; HttpOnly X-XSS-Protection: 1; mode=block Pragma: no-cache X-Frame-Options: SAMEORIGIN Date: Mon, 03 Aug 2020 21:58:48 GMT Connection: close Strict-Transport-Security: max-age=31536000; includeSubDomains X-Content-Type-Options: nosniff Content-Type: application/json Content-Length: 2028 { "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI4ejducEc2dUtfMkNyanE5STdWbUg0MjNnSWFiRVBzbmFFd3lOWUx5aEdFIn0.eyJleHAiOjE1OTY0OTIyMjgsImlhdCI6MTU5NjQ5MTkyOCwianRpIjoiODdiMjFjMDUtZTFmZC00ZWM0LTlmYzAtNzFjYzI1NjFmY2U3IiwiaXNzIjoiaHR0cDovLzE5Mi4xNjguNTYuMTEwL2F1dGgvcmVhbG1zL3Nub3dzYWJlci1leHNhbXBsZSIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiIyNGIxOWRmYS1hMDBkLTQ5MmEtODcwZi1kMzcxNThmZjQwNDEiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJleHNhbXBsZS1hcHAiLCJzZXNzaW9uX3N0YXRlIjoiZmRlYTgxZmUtNGFlNi00ZThmLWE1YTAtZDAxM2I4YTZiYWIxIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJhZG1pbi1yb2xlIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoiYWRtaW4ifQ.lomgtA6uDPY0uCm_1YlJ8NY3WLMBeZs0BxkW_VGBz5F6hZENNa0lMzSwGHWsC4TBOvkPn1l4K7oHrjDOGsKYX5RKHGauRVZcHZftAD5_kwQG8-G_V_UrOS_wCMCTAwONSBphYgPF4URcdeTBe_KWob3uj7mdYyFfa3zfrMMNyz-VlJSDYvXCp9xBDziWHlp0auJvp4m41y-ekF5y-hGryLcQG5b6LcTdzLq1FnOYXYb7eNpODAtfnPftdz2kacxMxAuscUiuIijOTJM5MIyDZNQ87tgEpUFr6SphXmsDp8NsCDj4zMrOn4ZbcbZAcNKS7fWz3l4ALX0na9b9RJ82gQ", "expires_in": 300, "refresh_expires_in": 1800, "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIyNDI4YzVhYy01YTMzLTQzNjYtOTdhMS1jMDIyNzRkNDcwZTkifQ.eyJleHAiOjE1OTY0OTM3MjgsImlhdCI6MTU5NjQ5MTkyOCwianRpIjoiNmIyZDRlN2MtYjZmMy00OWVjLWIxMjYtMjQxMWJhNjBlOThiIiwiaXNzIjoiaHR0cDovLzE5Mi4xNjguNTYuMTEwL2F1dGgvcmVhbG1zL3Nub3dzYWJlci1leHNhbXBsZSIsImF1ZCI6Imh0dHA6Ly8xOTIuMTY4LjU2LjExMC9hdXRoL3JlYWxtcy9zbm93c2FiZXItZXhzYW1wbGUiLCJzdWIiOiIyNGIxOWRmYS1hMDBkLTQ5MmEtODcwZi1kMzcxNThmZjQwNDEiLCJ0eXAiOiJSZWZyZXNoIiwiYXpwIjoiZXhzYW1wbGUtYXBwIiwic2Vzc2lvbl9zdGF0ZSI6ImZkZWE4MWZlLTRhZTYtNGU4Zi1hNWEwLWQwMTNiOGE2YmFiMSIsInNjb3BlIjoicHJvZmlsZSBlbWFpbCJ9._6aQhBA4PklQh9_4KeAiPQpHO3FjAgsq5hED9gwSsN4", "token_type": "bearer", "not-before-policy": 0, "session_state": "fdea81fe-4ae6-4e8f-a5a0-d013b8a6bab1", "scope": "profile email" }
参考サイト
https://keycloak-documentation.openstandia.jp/master/ja_JP/authorization_services/index.html
サンプルアプリケーションでKeycloakのSSO動作を確認してみよう (3/3)