(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Keycloak/RHBK】PowerShellからREST経由でアクセストークンを発行する

スポンサーリンク

やりたいこと

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"}

以上です。