問題タブ [single-logout]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
single-sign-on - Azure B2C シングル ログアウトが Edge または IE11 で機能しない
AAD B2C シングル サインオンを使用する 3 つの ASP.Net Webforms サイトがあり、すべてのブラウザーで完全に正常に動作しています。ただし、Edge や IE11 ではシングル ログアウトが機能しませんが、各サイトの個別のログアウトは正常に機能します。Chrome や Firefox などを使用している場合、問題なく動作します。1 つのサイトからログアウトし、他のサイトに移動して、たとえばリンクを更新またはクリックすると、ログアウトされます。
ログアウト URL はすべて B2C で正しく設定されています。そうしないと、どのブラウザーでも機能しません。私が見つけたのは、Edge と IE11 からログアウトするときに、各ログアウト URL へのリクエストが送信されないため、ログアウトを完了してすべてのセッションと Cookie をクリアするためにログアウト ページにあるコードが起動しないことです。なぜこれが起こっているのかを示唆するオンラインの情報は見つかりませんでした。誰でも助けることができますか?
spring-boot - Keycloak を使用したスプリングブート シングル サインアウト
説明
Keycloak 12.0.1 を ID プロバイダーとして使用するアプリケーションを作成しました。シングル サインオンは正常に機能し、「ローカル ログアウト」も同様です。
問題はシングルサインアウトです。
Web でドキュメントと問題を検索しましたが、何も見つかりませんでした。以下のログで説明されている 3 つの失敗シナリオがあります。
最後に質問は次のとおりです。
- 私は何を間違っていますか?
- アプリでバックチャネル ログアウトを実装するにはどうすればよいですか?
SSOut が機能することを理解する方法の例:
- ユーザーがアプリ A で「ログアウト」をクリックする
- アプリ A がセッションを終了する
- アプリAがKeycloakに通知
- キークロークは、バックチャネル ログアウトを介してアプリ B に通知します
- アプリ B がセッションを終了する
セキュリティ構成
メソッド keycloakCsrfRequestMatcher() は、「k_logout」などのライブラリ所有のエンドポイントを csrf 保護から解放しますが、自分の URL「/sso/logout」は解放しません。独自のマッチャーを作成することは可能かもしれませんが、これは開発者としての私の経験ではありません。
ログA
ご覧のとおり、KC が「/sso/logout」URL にアクセスしようとすると、CSRF エラーが発生します。しかし、これが KC で使用する適切なエンドポイントであるかどうかはわかりません。使用されているライブラリに「/k_logout」が見つかりました。これは、「内部リダイレクト」URL のようです。
(便宜上、日付などを削除しました。)
ログB
代わりに KC で「/k_logout」エンドポイントを使用すると、アプリで JWT 解析エラーが発生します。私はそれをデバッグしようとしましたが、org.keycloak.jose.jws.JWSInput では、encodedHeader の前に「logout_token=」が付けられているようで、これが問題のようです。少なくとも私には。:-)
ログC
.csrf().disable() を使用してアプリの csrf 保護を完全に無効にすると、上記のエラーは明らかになくなります。代わりに、アプリはログアウト要求をユーザーにマップできません。