공개 커뮤니티에서 자동 로그인 활성화?

이 주제에 대해 몇 가지 게시물을 확인했는데, 대부분이 해당 기능이 폐쇄형 커뮤니티에서만 사용 가능한 기능이라고 언급하고 있습니다. Auto-sign-in with the OpenId Connect Plugin and AWS Cognito - support - Discourse Meta

How to auto-login user in application web view - dev / sso - Discourse Meta

우리는 제품 등록 과정의 일부로만 계정을 생성할 수 있는 커뮤니티를 운영하기를 원합니다. 하지만 포럼의 콘텐츠는 공개적으로 표시되기를 원합니다. 이렇게 하면 사람들이 구글을 통해 자체 해결을 시도할 때 인증되지 않은 상태에서도 적절한 결과를 얻을 수 있을 것입니다. (또한 우리 콘텐츠에 대한 SEO 목표를 달성할 수도 있습니다)

이것이 가능한가요, 아니면 불가능한 꿈인가요? 이 질문을 하거나 이러한 제품 기능을 원하는 사람이 저만이 아닌 것 같습니다.

수정: 특히 OIDC 사양의 이 특정 측면에 대해 이야기하고 있습니다 - Auto-sign-in with the OpenId Connect Plugin and AWS Cognito - #8 by david

즉, 문제는 일부 사용자가 이미 Cognito에 로그인된 상태에서 답글을 작성하려고 할 때 로그인 대화상자가 표시되지 않기를 원한다는 것이죠? 저는 Discourse Connect의 경우 이것이 기본 동작이라고 생각했습니다.

사이트를匿名用户와 Google에 공개할 수 있습니다.

이상적인 상황에서는 커뮤니티를 보는 사용자는 계정이 있다면 항상 로그인 상태여야 하며, 이렇게 하면 해당 사용자의 모든 시청 데이터를 수집할 수 있습니다. 저는 제품 사용자가 제품 내에서 커뮤니티를 보기 위해 링크를 클릭하면 인증되도록 만들 계획이며, 사용자가 다른 곳에서 인증되어 있을 때만 볼 수 있는 링크들(예: 계정 페이지)도 마찬가지입니다.

하지만 사용자가 Google을 통해 스스로 해결책을 찾다가 커뮤니티에 도착한 경우, 시스템의 다른 곳에서 인증되어 있더라도 사용자가 커뮤니티와 직접 상호작용을 시도하기 전까지는 해당 데이터를 수집할 수 없습니다. 이 문제를 해결하는 유일한 방법은 login_required 사이트 설정을 활성화하는 것인 것 같으며, 제가 이해한 바로는 이는 사실상 사이트를 비공개로 만드는 것과 같습니다.

감사합니다. 이 사실을 몰랐습니다. 저는 세 가지 서로 다른 제품의 모든 세부 사항을 이해하려는 CM(커뮤니티 매니저)인데, 각각의 구체적인 사항을 파악하려고 하니 머리가 녹아내리는 것 같습니다! 모든 것을 정리하기 위해 몇 가지 더 게시글을 올릴 예정이니, 인내심을 가져 주셔서 감사합니다.

일반적인 경우 이는 불가능합니다(로그인을 요청하지 않고 익명 사용자에게 계정이 있는지 어떻게 알 수 있겠습니까?). 그러나 SSO 사이트에서 사용자가 이미 활성 세션을 가지고 있는지 감지하는 것은 가능해야 합니다.

해당 주제는 꽤 오래되었지만, 원칙은 여전히 적용될 수 있다고 생각합니다. 기본적으로 적절한 CORS 지원을 갖춘 URL을 추가하여 사용자가 활성 세션을 가지고 있는지 여부를 나타내는 JSON 응답을 반환하도록 합니다. 그런 다음 Discourse 테마에 해당 URL을 쿼리하고 활성 세션이 존재하면 SSO 프로세스를 트리거하는 JS를 추가합니다.

불행히도 일반적인 답은 지난번과 크게 다르지 않습니다.

제가 말씀드린 명세는 OpenID Connect Session Management입니다. 불행히도, 이 iframe 기반 솔루션은 많은 브라우저가 이제 기본적으로 제3자 쿠키를 차단하고 있기 때문에 점점 더 유용성이 떨어지고 있습니다. 이제 이 솔루션이 안정적으로 작동하려면 아이덴티티 제공자와 Discourse가 동일한 'origin’을 가져야만 합니다.

@simonk 님이 말씀하신 대로, 아이덴티티 제공자에 따라 테마 컴포넌트를 통해 커스텀 구현이 가능할 수 있지만, Discourse 자체에 추가할 수 있는 일반적인 솔루션은 제가 아는 한 없습니다.

하지만 제가 틀린 것 같습니다.

‘답글’을 클릭하면 로그인 플로우가 트리거된다는 말씀이 완전히 맞습니다. 그리고 DiscourseConnect(또는 다른 단일 로그인 제공자)가 사용 중이라면 Discourse 로그인 모달은 건너뛸 것입니다 :+1:

하지만 저는 OP가 ‘답글’이나 ‘로그인’을 클릭할 필요 없이 사람들이 자동으로 로그인되기를 원한다고 생각합니다. 그런 설정이라면 사용자가 메인 사이트와 커뮤니티 사이를 오갈 때 완전히 매끄러운 경험을 할 수 있습니다. 우리는 몇몇 고객에게 이를 구현해 주었지만, 이들은 쉽게 일반화할 수 없는 맞춤형 구현이었습니다.

한 가지 접근 방식의 예를 들어 보겠습니다. 포럼이 forum.example.com에 있고, 메인 사이트가 example.com에 있다면, 포럼은 example.com의 쿠키를 읽을 수 있도록 허용됩니다. 따라서 테마 컴포넌트는 쿠키의 존재 여부를 확인하고 다음과 같은 작업을 수행할 수 있습니다:

const cookie = require("discourse/lib/cookie").default;
if(cookie('name_of_example_com_auth_cookie') && !api.getCurrentUser()){
  // User has an auth cookie for example.com. They are almost certainly
  // logged in there, so let's run the auth flow
  window.location = "https://forum.example.com/auth/oidc"
}

(여기에는 여러 조건이 적용됩니다. 예를 들어 쿠키는 http_only가 아니어야 하고, host-only 쿠키도 아니어야 합니다 등.)

사실 그렇습니다. 그것이 가능하다는 것을 알게 되어 좋지만, 커스텀 구현이 필요하다는 점은 아쉽네요.

또한 사용자가 답글을 누르면 구현 방식에 따라 로그인 다이얼로그가 건너뛰어질 수 있다는 점을 몰랐습니다. 이것만으로도 제 우려가 상당 부분 해소됩니다. 제가 피하고 싶은 가장 큰 진입 장벽이 바로 이것이었기 때문입니다. 구현이 가능하다는 점이 다행입니다.

물론 데이터에 관심이 많은 제 마음속으로는 이상적인 버전을 원하고 있으며, 궁극적으로 그 방향으로 나아가게 될 수도 있습니다. 지금은 가능하다는 사실만 알아도 충분합니다. 다시 한번 시간을 내어 주신 모든 분들께 감사드립니다.