やりたいこと
PowerShellからKeycloak(RedHat Build of Keycloak)のアクセストークンを発行する。尚、adminユーザを利用したパスワード方式での実行を想定する。
環境情報
- rhbk-22.0.8
- PowerShell 7.3.11
やり方
ボディデータをハッシュテーブルで定義した上でInvoke-RestMethodでPOSTリクエスト送信する。
具体的てには以下スクリプトを実行することで取得が行えた。
$client_id = "admin-cli" $client_secret = "admin" $token_endpoint = "http://xx.xx.xx.xx:8080/realms/master/protocol/openid-connect/token" $body = @{ client_id = $client_id client_secret = $client_secret grant_type = "password" username = "xx" password = "xx" } $response = Invoke-RestMethod -Method Post -Uri $token_endpoint -Body $body -ContentType "application/x-www-form-urlencoded" $access_token = $response.access_token
$access_tokenに格納されているため、末尾に以下を追記すると標準出力にアクセストークンが表示される。
echo $access_token
以下、補足です。
補足
エラーのパターンとしてはKeycloak側に接続ができない場合は
Invoke-RestMethod: ...:13 Line | 13 | $response = Invoke-RestMethod -Method Post -Uri $token_endpoint -Body … | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Connection refused
とコネクションエラーとなったり、
ContentTypeに別の値を指定した都合でKeycloak側が認識できない場合に以下のエラーとなりました。
Invoke-RestMethod: ...:14 Line | 14 | $response = Invoke-RestMethod -Method Post -Uri $token_endpoint -Body … | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | {"error":"RESTEASY003065: Cannot consume content type"}
以上です。