Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)

제가 알고 있는 최악의 시나리오는 다음과 같은 조건이 필요합니다:

  • 외부 사이트에서 이메일 주소가 검증되지 않은 경우
  • SSO 페이로드에 require_activation=true가 설정되지 않은 경우
  • Discourse 사이트에 SingleSignOnRecord가 연관되어 있지 않은 기존 계정이 있는 경우 (계정 소유자가 SSO를 사용하여 Discourse에 로그인해 본 적이 없는 경우)

이러한 경우, 누군가 SSO로 로그인해 본 적이 없는 Discourse 사용자의 이메일 주소를 사용하여 외부 사이트에서 가입할 수 있습니다. 그러면 외부 사이트의 미검증 계정이 동일한 이메일 주소를 사용하는 Discourse 계정을 탈취할 수 있게 됩니다. 해당 계정이 Discourse의 관리자 계정이라면 특히 심각한 문제가 됩니다.

실제로 외부 사이트가 이메일 검증을 처리하지 않는 경우, Discourse가 이메일 검증을 처리하도록 권장됩니다:

다만, 이메일 검증을 외부 사이트에서 처리하는 것이 더 좋은 이유는 몇 가지 있습니다:

  • 사용자에게 Discourse에서 확인 이메일을 받도록 강제하면 사용자가 처음 Discourse에 로그인하려고 할 때 일부 마찰이 발생합니다. (현실적으로 그 마찰은 어딘가에서 발생해야 합니다 - Discourse 측이거나 외부 사이트 측일 수 있습니다.)
  • SSO 페이로드에 require_activation이 true로 설정되어 있으면, Discourse는 이메일 주소에 기반하여 기존 Discourse 계정을 외부 로그인과 일치시키지 않습니다. 이는 일부 계정이 사용자명/비밀번호로 등록되어 Discourse에 생성된 후에 DiscourseConnect를 활성화할 경우 문제가 됩니다. 또한 어떤 이유로든 Discourse에서 SingleSignOnRecord 항목을 삭제해야 할 경우에도 문제가 됩니다. 사용자가 Discourse에 다시 로그인하려고 할 때 Discourse가 자동으로 새 SingleSignOnRecord 항목을 생성하지 않기 때문입니다.
4개의 좋아요