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


Keycloak x django-allauthのOIDC認証にPKCEを追加する

概要

以下の記事などでKeycloak x django-allauthでの基本的なOIDC認証は検証できた。

kamatimaru.hatenablog.com

今回はOIDCで推奨されているセキュリティ対策の仕組みであるPKCEを追加してみる。

PKCE自体については巷に以下のような解説記事がたくさんあるのでここでは触れない。

techblog.yahoo.co.jp

www.authlete.com

Keycloak側の設定

Keycloak側は管理画面のメニューからClients -> 対象のクライアントを選択 -> Advanced -> Advanced settingsと遷移するとPKCEの設定があるセクションにたどり着ける。

「Proof Key for Code Exchange Code Challenge Method」というのが設定項目っぽい。

S256plainが選べるが、デフォルトでは未選択になっている。

未選択の場合、PKCEは適用されないらしい。

S256を選択して保存する。

Django側の設定

まず何もせずにdjango-allauthでKeycloakのOIDC認証を試みる。これまでは認証が成功していたのに、以下のようにエラーが返されるようになった。

django-allauth側でPKCE対応の設定をしていないからと考えられる。

公式ドキュメントによると、settings.py"OAUTH_PKCE_ENABLED": Trueの1行を追加するだけでいいらしい。

settings.py

# ...省略
SOCIALACCOUNT_PROVIDERS = {
    "openid_connect": {
      "OAUTH_PKCE_ENABLED": True, # 追加
        "APPS": [
            {
                "provider_id": "keycloak",
                # ...省略
            }
        ]
    }
}
# ...省略

https://docs.allauth.org/en/dev/socialaccount/providers/openid_connect.html

設定を追加したら、以下のようにログイン画面にアクセスできるようになった。PKCE特有のパラメータであるcode_challenge_methodcode_challengeもちゃんと付与されている。

→ ID/パスワードを入力したら認証も成功した。

以上でKeycloak x django-allauthのOIDC認証にPKCEを追加することに成功した。




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

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