概要
以下の記事の続き。
なぜかアクセストークンでKeycloakのUserinfoエンドポイントを叩いた場合
- HTTPスタータスコードは200
- コンテンツが0バイト
という結果になってしまったのでデバッグする。
結論
以下のコマンドで取得できた。
$ curl -X GET "http://localhost/realms/master/protocol/openid-connect/userinfo" -H "Host: proxy" -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIybHY4NjhyR09welhUcmhKRktWOHdxQWwzbWlYYkRpWGRiT2RuVERQWGVrIn0.eyJleHAiOjE3Mzc1NTg0ODUsImlhdCI6MTczNzU1Nzg4NSwiYXV0aF90aW1lIjoxNzM3NTU3ODg1LCJqdGkiOiI5NGE5MjUzOC0zZGRhLTQyYTYtOWIwMC1iOTEzMTAzYmZiNWEiLCJpc3MiOiJodHRwOi8vcHJveHkvcmVhbG1zL21hc3RlciIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiJiZGIyNzBlOS1kMDc1LTQwODAtYjJkNy02ZDNhNDAzYjg4ZWUiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJ0ZXN0Y2xpZW50Iiwic2lkIjoiNGZkODg1NGUtNTc0Ny00OTg3LTgyMjMtMWY3ZTM3NTMzNTdlIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vMTI3LjAuMC4xOjE4MDAwIiwiaHR0cDovL2xvY2FsaG9zdDoxODAwMCJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1tYXN0ZXIiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwibmFtZSI6IuWkqumDjiDlsbHnlLAiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0ZXN0IiwiZ2l2ZW5fbmFtZSI6IuWkqumDjiIsImZhbWlseV9uYW1lIjoi5bGx55SwIiwiZW1haWwiOiJ0ZXN0QGV4YW1wbGUuY29tIn0.IQnux2Qs4f4qSCxkjCNCvcamfLR2LQvSjdwzIinuoH4udyGzI-Dj9_ANs4wMwvMqqnewNjz8oFEJL-cgMRafrodSSkL-NpKH0c7OIGvp8gCtOPYB-lPsmUYpb7k7gH6_2MSQZJ2WfF-a6dvKb6z7B6EME5NfC9zNKklZgcyOPY3QelhU5LWElzdA3XzODCkVwSOoLqmbIR9WYWtHO9JpW_Ah0-gU_X4igmLSzBc0MzF7J1EljBWF071g8MVwZ9Gr21qvDs8KQjIA6GATm9Raf6U14CaebUp0jbcFypp6f08lI72YMYoswUnowQAVAMMJFT08aRfxRfUIFsTd3aoc_w" {"sub":"bdb270e9-d075-4080-b2d7-6d3a403b88ee","email_verified":false,"name":"太郎 山田","preferred_username":"test","given_name":"太郎","family_name":"山田","email":"test@example.com"}%
前の記事から修正したところ
127.0.0.1 → localhostに変える
Keycloakの前段にリバースプロキシとしてCaddyを立てている。
Caddyの設定ファイルで、localhostは登録していたが127.0.0.1はホストとして登録していなかった。
Caddyfile
localhost:80, proxy:80 {
reverse_proxy keycloak:8080 {
# ...省略
}
# ...省略
}
従って、そもそもKeycloakまで到達していなかった。これは凡ミス。
アクセストークンの期限を伸ばす
Keycloakのアクセストークンの期限がデフォルトでは1分になっていた。これだと以下のように作業中にトークンが期限切れになってしまう。
※ 今度はちゃんとエラーメッセージが返されるので、トークンの検証に失敗したことがわかる。
* Request completely sent off < HTTP/1.1 401 Unauthorized < Content-Length: 0 < Content-Type: text/plain;charset=utf-8 < Referrer-Policy: no-referrer < Server: Caddy < Strict-Transport-Security: max-age=31536000; includeSubDomains < Www-Authenticate: Bearer realm="master", error="invalid_token", error_description="Token verification failed" < X-Content-Type-Options: nosniff < X-Xss-Protection: 1; mode=block < Date: Wed, 22 Jan 2025 15:19:19 GMT < * Connection #0 to host 127.0.0.1 left intact
アクセストークンの期限はKeycloakの管理画面で変更できるので10分に伸ばした。
