알 수 없는 이메일을 그룹에 추가하여 SSO 우회

사이트에서 SSO가 활성화되어 있다고 가정해 보겠습니다.

여기에 설명된 인터페이스를 사용하여 사용자를 대량으로 그룹에 추가할 때, 입력 목록에 있는 이메일 주소가 이미 Discourse에 존재하지 않으면 초대 이메일이 전송됩니다.

링크를 클릭하면 Discourse 내에서 계정 생성 페이지로 이동합니다:

양식을 작성하면 계정이 생성됩니다. 생성된 계정에는 SSO 정보가 없습니다.

이것이 왜 문제가 되는지 충분히 명확하다고 생각합니다:

  • SSO 인증 시스템을 우회하는 것은 매우 위험합니다.
  • "X명이 곧 이메일을 받을 것입니다"라는 경고가 없었기 때문에, 메시지가 전송되고 있다는 사실을 인지하지 못한 채 실수로 많은 사람들에게 스팸을 보냈습니다.

기대한 동작:

  • SSO가 활성화된 상태에서 사용자를 대량으로 그룹에 추가할 때, 이미 사이트에 존재하지 않는 이메일 주소는 무시해야 합니다.
7개의 좋아요

리포트해 주셔서 감사합니다. 개발 사이트에서 해당 문제를 재현할 수 있었습니다. SSO가 활성화된 경우, 사이트에 이미 없는 이메일은 그룹에 추가되어도 무시되어야 합니다. 이 문제를 수정하겠습니다. 불편을 드려 죄송합니다.

8개의 좋아요

PR #11950와 PR #11951에서 수정되었습니다. 보고해 주셔서 감사합니다! :smiley:

7개의 좋아요

이 주제는 마지막 답변 후 24시간이 지나면 자동으로 닫힙니다. 더 이상 새 답변을 작성할 수 없습니다.

@Grayden_Shand 실제로 현재는 가입 양식을 작성하는 대신 SSO 인증을 통해 초대 코드를 사용하도록 하는 방식을 고려하고 있습니다. 초대를 사용할 때 사용자가 SSO로 인증해야 합니다. 이 방식이你们的 사용 사례에 맞을까요?

@sam 초대 플로우를 생각해보고 있는데, 한 가지 불확실한 점은 초대장이 발송된 이메일이 SSO 이메일과 일치해야 하는지 여부입니다. 이메일 기반 초대에는 이를 강제할 수 있지만, 링크 기반 초대에는 적용하기 어려울 것 같습니다. 어떻게 생각하시나요?

3개의 좋아요

네, 특히 계정 승인이 필요한 사이트의 경우 이를 반드시 강제해야 합니다.

이렇게 하면 Facebook 인증을 활성화하고 로컬 인증을 비활성화하더라도 사용자를 온보딩할 수 있습니다.

다만 초대 링크는 이메일과 연결되지 않으므로(명백하게) 이 규칙의 예외로 처리됩니다.

1개의 좋아요

저희 사용 사례의 경우, 초대 이메일을 완전히 비활성화할 수 있는 기능이 훨씬 낫겠습니다. 저희 사이트 대부분(온라인 코스를 위한 임시 커뮤니티)은 가입 기간이 제한되어 있으며(수수료 부과) 가입이 가능한 시간이 정해져 있습니다. 따라서 사이트에 초대장을 받은 사람이 실제로 접속했을 때 더 이상 가입할 수 없다는 사실을 알게 되면 좌절감을 느낄 것이라고 생각합니다. 저희는 사이트 초대장을 받는 상황이 발생하기를 원하지 않습니다.

이 기능을 진행하신다면, 다음과 같은 경고 메시지도 구현해 주셨으면 합니다: “당신의 사이트 사용자가 아닌 XX명에게 이메일을 보내려 합니다: bob@example.com, alice@example.com, …” 이렇게 하면 해당 사용자를 찾아서 일괄 추가 목록에서 제거할 수 있을 것입니다.

그런 경우를 위해 초대 링크를 사용하실 수 있을까요? 이렇게 하면 아무에게도 이메일이 발송되지 않고 만료 날짜도 설정할 수 있습니다.

여전히 이메일 발송을 우회하는 닌자 모드를 일부 지원하여 대량의 이메일을 허용 목록에 추가할 수 있도록 하고 있지만, 초대 링크 기능이 이 문제를 해결해 줄 수 있을지 궁금합니다.

1개의 좋아요

그렇지 않을 것 같은데, 아마도 질문을 제대로 이해하지 못한 것 같습니다. 우리가 Discourse, SSO 기능을 어떻게 사용하며 왜 처음에 이 버그에 부딪혔는지 설명드리겠습니다.

우리는 워크숍(코스)의 각 세션마다 임시 Discourse를 사용하는 e-learning 플랫폼을 운영하고 있습니다.

우리는 SSO를 커스텀 인증 시스템과 함께 두 가지 이유로 사용합니다:

  1. 사용자가 등록한 모든 코스에 액세스하기 위해 자격 증명 한 세트를 생성하기만 하면 되도록 하기 위함입니다.
  2. 데이터베이스의 임의의 데이터에 기반하여 각 Discourse에 누가 액세스할 수 있는지 정책을 강제 적용하기 위함입니다. 예를 들어, 우리의 Discourse SSO 엔드포인트에서 사용자가 유효한 등록을 가지고 있는지 그리고 해당 날짜가 우리의 시작 및 종료 날짜 범위 내에 있는지 확인합니다.

위에서 언급한 버그는 한 워크숍에 다른 워크숍에 belonged했던 사람들만을 위한 그룹(예: 동문 그룹)을 만들려고 할 때 발생했습니다. 그래서 다른 워크숍의 전체 수강생 명단을 일괄 추가 모달에 추가했는데, 현재 워크숍에 등록하지 않은 명단 내 모든 사람에게 실수로 초대를 보내게 되었습니다.

따라서 우리는 Discourse의 초대 기능(링크 또는 이메일 방식)을 실제로는 거의 사용하지 않습니다. 만약 초대 기능이 필요하더라도, 우리가 보낸 모든 초대 위에 추가하고 싶은 비즈니스 로직이 있기 때문에 아마도 직접 구축해야 할 것입니다. 예를 들어, 워크숍 등록 기간이 종료되었다면 링크에서 오류 메시지를 표시하고 싶을 수 있습니다. 또는 링크에 할인 정보를 포함하고 싶을 수도 있습니다.

결국, 이 기능을 사용하지 않아도 작동하는 것이 중요하지만, 해당 Discourse에 계정이 없는 사람들에게 우발적으로 이메일을 보내는 걱정을 하지 않아도 되었으면 합니다.

3개의 좋아요