Keycloak SSO 및 로그아웃 문제

안녕하세요!
@david 도와주세요, 정말 대단하신 분이시죠! ))))

Discourse + Keycloak SSO + SAML 플러그인 + Openid Connect 플러그인 번들을 성공적으로 설정했습니다. 다만 이 완벽한 구성을 어둡게 하는 단 하나의 문제가 있습니다. 바로 로그아웃입니다.

포럼에서 로그아웃을 하면 사용자는 인증이 해제되며, 이 부분은 정상적으로 작동합니다.
그런데 Keycloak에서 열린 세션을 확인해 보면, 포럼을 떠난 사용자의 세션은 삭제되지 않습니다.
이 문제는 로그아웃 URL 설정 때문일 것 같지만, Discourse 쪽인지 Keycloak 쪽인지 정확히 어디에 설정해야 하는지 모르겠습니다.

Keycloak의 SAML 설정입니다:

Keycloak의 Openid Connect 설정입니다:

OpenID Connect 플러그인은 RP Initiated Logout를 지원합니다. Keybase에서는 이 기능이 지원되나요?

이제 그것이 무엇인지, 그리고 Keycloak에 존재하는지 파악해야 합니다 ))))
이 옵션은 openid-connect 플러그인에서 어디에 설정하나요?

사이트 설정에서 구성됩니다:

감사합니다! Keycloak가 이 질문과 어떤 관련이 있는지 구글에서 찾아보겠습니다.

네! 잘 작동합니다! openid_connect_rp_initiated_logout_redirect 변수를 설정해야 한다는 점을 명확히 하고 싶습니다.

@david 한 가지 더 질문이 있습니다. 매우 중요한 질문입니다.
현재 Keycloak SSO 테스트의 최종 단계에 있으며, 프로토콜을 선택해야 합니다 - SAML 또는 OpenID Connect.
OpenID Connect가 더 마음에 들었지만, OpenID Connect를 사용할 때新用户 생성 과정에서 짜증스러운 문제를 발견했습니다.

문제를 이해하기 위해 다른 측면부터 시작하겠습니다. SAML을 사용하여 새로운 포럼 사용자가 생성되면, 사용자는 SSO에서 생성되고 Discourse에서 생성을 위해 투명하게 제출됩니다. 그리고 즉시 활성화됩니다 - 이것이 중요합니다!
즉, Discourse 포럼에서 "Sign Up"을 클릭하면 Keycloak로 이동하여 사용자를 생성하고 이메일을 확인하는 등의 작업을 수행합니다. 그 후, Discourse 포럼으로 이동하면 사용자가 이미 생성되고 활성화된 상태로 자동으로 표시됩니다:

하지만 OpenID Connect 플러그인을 사용하면, 새로운 사용자를 생성할 때 다음과 같은 창이 나타납니다:

이것은 매우 불편합니다! 왜 이런가요? SSO에서 계정을 생성할 때 사용자의 이메일은 이미 확인되었는데 말입니다. 이 창을 없앨 방법이 있을까요?

미리 감사드립니다!

이 메시지가 OpenID Connect와 관련하여 표시되고 있다면, 이는 아이덴티티 제공자(IDP)가 email_verified: false 메시지를 Discourse로 전달했다는 뜻입니다. 상세 디버깅 설정을 활성화하면 모든 인증 데이터가 /logs에 출력되므로 이를 검토해 볼 수 있습니다. Keycloak가 인증 상태를 올바르게 전달하도록 설정할 수 있는 방법이 있기를 바랍니다.

그렇다면 왜 SAML 플러그인은 이를 무시하는 것일까요?

SAML 플러그인에서는 saml_default_emails_valid 전역 설정(기본값: true)으로 이 기능이 제어됩니다.

해결책을 찾았어요! ))))
Keycloak에서:

이 옵션들을 비활성화하세요:

Keycloak가 이메일을 검증했는지 100% 확신이 있다면 괜찮습니다. 이메일이 검증되지 않은 상태라면 그렇게 하면 공격자에게 Discourse 사이트가 노출될 수 있습니다.

네, 맞아요…
이제 새로운 케이스를 테스트해 봅니다 - Keycloak OpenID 클라이언트 하나를 공유하는 두 개의 포럼 ))

참고로 @david 님, 어떤 방식이 더 정확한가요?

  1. 현재처럼 모든 포럼에 하나의 OpenID 클라이언트를 사용하고 필요한 Valid Redirect URLs를 지정하는 것:

  2. 아니면 각 포럼마다 자체적인 OpenID 클라이언트를 사용하는 것?

Keycloak에는 익숙하지 않지만, 두 가지 방식 모두 괜찮아 보입니다. 나중에 각 포럼별로 별도의 액세스 제어를 설정하고 싶다면, 각각을 별도의 클라이언트로 구성하는 것이 더 쉬울 수 있습니다 :man_shrugging: