以下の内容はhttps://kamatimaru.hatenablog.com/entry/2025/01/23/003515より取得しました。


django-allauthでOIDCのアクセストークンを取得する②

概要

以下の記事の続き。

kamatimaru.hatenablog.com

なぜかアクセストークンで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.1localhostに変える

Keycloakの前段にリバースプロキシとしてCaddyを立てている。

caddyserver.com

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分に伸ばした。

前回の記事と合わせて、django-allauthから能動的にアクセストークンを取得する方法を確立できた。




以上の内容はhttps://kamatimaru.hatenablog.com/entry/2025/01/23/003515より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14