여기에 명시된 최신 업데이트를 반영한 3가지 조건을 따랐더니, Keycloak를 통해 인증할 수 있게 되었고, 이미 로그인된 상태라면 “로그인” 버튼을 클릭했을 때 Keycloak에서 가져온 사용자 정보로 필드가 채워진 “새 계정 만들기” 화면이 표시됩니다.
사용자가 추가적인 단계를 거쳐야 하는 이 부분을 건너뛸 수 있는 방법이 있을까요? 이 필드들은 이미 Keycloak에서 자동으로 채워지므로, Discourse를 위해 사용자가 별도로 수정할 필요가 없어야 합니다.
Grafana가 처리하는 방식과 유사하게, 계정 생성이 암묵적으로 처리되기를 바랍니다. 커뮤니티에서 제공하는 모든 서비스가 이러한 원활한 경험을 지원하여, 사용자가 가입한 원래의 커뮤니티 계정만 다뤄도 되는 환경을 만들고 싶습니다.
Google / Facebook / Github / 기타 외부 인증을 염두에 두고 있다면 이 말이 맞지 않을 수 있습니다. 사용자는 Keycloak에서 이러한 외부 서비스 중 하나로 커뮤니티 계정을 등록할 수 있지만, 내부적으로만 사용되는 Keycloak가 개별 서비스들과 모두 연동되도록 설계되어 있으므로, 암묵적/자동 동의 및 가입이 바람직합니다.
디스코스에 처음 온 것인데, SSO OAUTH2 제공자를 설정하고 정상적으로 작동하도록 만들었습니다. 새로운 사용자는 디스코스에 처음 접속하고 인증할 때 프롬프트 화면을 한 번 봅니다. 이 과정을 어떻게 간소화해서 사용자가 자동으로 생성되도록 할 수 있을까요? 해당 화면에 표시되는 값들은 정확하며, 한 번만 표시되는 것입니다. 커뮤니티 사용자의 계정 생성 과정을 간소화하고 그 화면을 제거하려면 어떻게 해야 할까요?
현재 이는 불가능합니다. 사용자가 처음 계정을 생성할 때, 가입 양식에서 “새 계정 만들기” 버튼을 클릭해야 합니다.
원하시는 동작은 Discourse의 SSO 구현 방식과 유사합니다. 그 경우, 사용자가 가입 양식을 채우지 않아도 백그라운드에서 계정이 생성됩니다. OAuth2 로그인에 대해 유사한 기능을 구현하는 것이 가능해 보이지만, OAuth2 제공자에서 계정을 생성하는 데 필요한 충분한 정보가 전달되지 않는 경우가 있을 수 있습니다.
여기서 글을 쓴 이후로 이 문제에 많은 시간을 들이지는 않았지만, 결국 OpenID-Connect를 위한 브리징 서비스(컨테이너가 포함된 Python 서비스)를 찾아서 Discourse의 SSO 기능을 사용하게 되었습니다. 덕분에 docker-compose 설정으로 배포하는 것이 더 쉬워졌습니다.
Keycloak에서 이미 등록되고 로그인된 계정을 제공하면, Discourse에 방문했을 때 브리지에서 제공하는 세부 정보로 사용자가 가입되는 방식이었습니다(iirc). 이 문제를 다룬 지 좀 오래되었지만, 제 기억으로는 Discourse의 OAuth/OpenID-Connect 지원 방식보다 약간 더 나은 프로세스였습니다(적어도 당시에는 그랬고, 이후 개선이 되었는지 확인은 해보지 않았습니다).
어쨌든, 예상대로 계정 세부 정보가 동기화되지 않습니다. 동기화가 발생하려면 사용자가 Discourse에서 로그아웃했다가 다시 로그인해야 하며, 심지어 그렇게 해도 SSO 제공자에서 Discourse로 동기화할 수 없는 항목이 몇 가지 있었던 것 같습니다(그룹/역할 같은 것, iirc). 몇 가지 함정이 있었습니다.
적절한 동기화 설정을 구축하려면, 제공자에서 사용자 세부 정보가 업데이트되는 것을 감지하여 Discourse의 API를 통해 업데이트를 트리거하는 로직이 필요할 것입니다. 그렇지 않으면 동기화되지 않은 중복된 세부 정보가 생기거나, 사용자 입장에서는 혼란스러운 동기화 상황이 발생할 수 있습니다.
아, 그리고 현재 사용하고 계신 OAuth2 SSO 통합이 일반적으로 SSO 브리지가 필요한 Discourse SSO 기능이 아니라 플러그인 대안이라면, SSO 브리지를 사용하는 플러그인이 아닌 버전으로 변경하면 원하시는 경험을 얻을 수 있을 것입니다(iirc).