- Keycloakでのログアウト方法について個人用にメモしておく。
バックチャネル ログアウト
リクエスト
POST /auth/realms/{YOUR_REALM_NAME}/protocol/openid-connect/logout HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
Content-Length: 759
client_id=python-client&client_secret=a07f9...8213d1&refresh_token=eyJhbGci...twOA
- パラメータ
-
client_id
:クライアントID -
client_secret
:クライアントシークレット -
refresh_token
:リフレッシュトークン
-
レスポンス
HTTP/1.1 204 No Content
フロントチャネル ログアウト
リクエスト
GET http://localhost:8080/auth/realms/{YOUR_REALM_NAME}/protocol/openid-connect/logout?id_token_hint=eyJhbGciOiJS...RE2AZmGgKJAj-HlHw&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fauth%2Flogout%2Fcomplete&state=e18689b0503aab42574427fb575645aca0065bb758aa8463acf4506fe8a61e81
- パラメータ
-
id_token_hint
:IDトークン -
post_logout_redirect_uri
:ログアウト後リダイレクトURI。Valid Redirect URIs
に設定した値。 -
state
:CSRF対策文字列
-
レスポンス
- ログアウト後リダイレクトURIへのリダイレクトする。
HTTP/1.1 307 Temporary Redirect
http://localhost:8000/auth/logout/complete?state=e18689b0503aab42574427fb575645aca0065bb758aa8463acf4506fe8a61e81
- パラメータ
-
state
:リクエストで指定したstate
-
その他
バックチャネル/フロントチャネルともに、クライアントにBackchannel Logout URL
を設定している場合は、KeycloakからURLへバックチャネルログアウトリクエストが行われる。
POST /auth/backchannel_logout HTTP/1.1
Host: localhost:8000
Content-Type: application/x-www-form-urlencoded
Content-Length: 759
logout_token=eyJhbGciOiJSUzI1NiIs...zspo4weMQfU-1jL0DxSg
-
logout_token
ペイロード{ "aud": "python-client", "events": {"http://schemas.openid.net/event/backchannel-logout": {}}, "iat": 1646546432, "iss": "http://localhost:8080/auth/realms/{YOUR_REALM_NAME}", "jti": "2f097820-f1d1-4453-9a7a-95e53838aa5e", "sid": "41997f9c-1873-48ab-a308-52f35422cbb5", "sub": "dc6f27d8-47c0-46ab-87d3-787dd61e64cd", "typ": "Logout" }