외부 SSO 제공자를 사용하여 계정을 자동으로 프로비저닝할 수 있나요? (새 계정 만들기 프롬프트 건너뛰기)

방금 Discourse 인스턴스를 설정하고 discourse-openid-connect 플러그인을 추가하여 Keycloak를 OIDC 제공자로 연결했습니다.

여기에 명시된 최신 업데이트를 반영한 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).

OAuth2를 사용할 때 이 “새 계정 만들기” 창이 뜨는 것을 피하는 방법에 대해서도 관심이 있습니다.
모든 필드가 이미 입력되어 있는 경우 이를 건너뛸 수 있도록 어딘가에 옵션을 추가할 수 있을까요?

이 문제를 해결하는 데 도움이 되는 몇 가지 새로운 사이트 설정을 추가했습니다. ‘새 계정 만들기’ 화면을 건너뛰려면 sso_overrides_username, sso_overrides_email, sso_overrides_name을 활성화하세요.

그 다음 팝업을 완전히 건너뛰려면 external_auth_skip_create_confirm을 활성화하세요.

해당 옵션이 보이지 않는다면 tests-passed의 최신 버전을 사용 중인지 확인해 주세요.

external_auth_skip_create_confirm이 활성화되어 있습니다

문제가 있습니다:

  1. 이미 discourse에 test__EMAIL__ 계정이 생성되어 있습니다.
  2. OpenID로 로그인할 때 사용자 이름: test, 이메일: test__EMAIL__를 입력하면 test1이라는 새 사용자 이름과 test__EMAIL__라는 이메일을 입력하라는 새 계정 창이 나타납니다.

그리고 기존 계정을 OpenID와 연결할 방법이 없습니다.

OpenID Connect 제공자가 사용자 이메일을 검증하나요? 이메일이 검증되었고 verified 불리언 값이 올바르게 설정된 경우에만 OIDC에서 이메일을 '신뢰’할 수 있습니다.

OID 제공자 없음 - LDAP 사용자 연동이 포함된 Keycloak
방법을 찾았습니다 - 기존 사용자가 사용자 설정 화면에서 OpenID를 연결할 수 있습니다

@david 우리는 stable 2.5.2를 사용 중인데 이 옵션이 없습니다… 이 옵션을 stable 브랜치로 이식할 수 있을까요? 이 옵션이 필요하지만, 프로덕션에서는 stable 브랜치 외에는 아무것도 사용하지 않거든요…

안타깝게도, 새로운 기능을 안정 버전으로 역호출(backport)하지 않습니다. 다음 안정 버전의 출시 시기에 대한 정보는 #releases 채널을 주시해 주세요.

@david
다음 안정판이 정확히 어떤 내용인지 명확하지 않네요… 2.5.3 마이너 버전인가요? 아니면 2.6.0 버전인가요?

다음 주요 버전은 2.6.0입니다. 부수 버전(2.5.x)은 보안 수정 사항에 대해서만 배포됩니다.

@david
감사합니다! 이제 명확해졌습니다. 2.6.0은 올해 출시되나요? )))

확정된 날짜는 없지만, 올해 안에 진행될 가능성이 높습니다 :slight_smile: