keycloak v1.5.0.Final / Internet Explorer 11 で同じ問題が発生し、最終的に何が起こっているのかを突き止めました。
1.舞台裏
Keycloakのinitメソッドでモード「login-required」または「check-sso」を使用する場合、Keycloak Javascriptアダプターは、ユーザーが認証されていることを定期的にチェックするiframeを設定します。
この iframe は、キークロークのサーバーから取得されます (たとえばhttp(s)://yourkeycloakhost:port):
http(s)://yourkeycloakhost:port/auth/realms/yourrealm/protocol/openid-connect/login-status-iframe.html?client_id=yourclientid&origin=http(s)://yourorigin
そのコンテンツは、認証時にキークロークによって以前に設定された KEYCLOAK_SESSION Cookie にアクセスできる Javascript スクリプトです(つまり、同じドメイン上でhttp(s)://yourkeycloakhost:port)。
2.IEの問題
はい!これは、iframe と Cookie に関する厳格なポリシーを持つ Internet Explorer の問題です。実際には、keycloak iframe は、そのP3P ポリシーにより、ドメイン Cookie にアクセスできません(Microsoft Internet Explorer は、P3P をサポートする唯一の主要なブラウザーです)。yourkeycloakhost
この問題は、このstackoverflowの質問でよく説明されています
3. 解像度
解決策は、Internet Explorer が Cookie を使用するためにキークロークのドメイン ( ) を信頼するようにするyourkeycloakhostことです。これにより、iframe はKEYCLOAK_SESSIONCookie の値を読み取り、そのデータに登録できます。
これを行うには、キークローク サーバーがHTTP 応答ヘッダーに P3P 情報を追加する必要があります。これは、常に適切なヘッダーを設定する apache または nginx プロキシを使用して行うことができます。私はApacheでそれを行いました.それはmod_headersモジュールです:
Header always set P3P "CP=ALL DSP COR CUR ADM PSA CONi OUR SAM OTR UNR LEG"
W3Cを使用した P3P の詳細を確認したり、このP3P バリデーターを使用して P3P ポリシーを検証したりできます。
4. 結果
キークロークのiframeコードを見ることができます:
var cookie = getCookie('KEYCLOAK_SESSION');
if (cookie) {
data.loggedIn = true;
data.session = cookie;
}
ドメインの Cookie がyourkeycloakhostInternet Explorer によって正しく取得されるようになり、問題が修正されました。