WordPress SSO 및 Patreon 로그인

다시 인사드립니다! 질문이 하나 있습니다. 제 고객 중 한 분이 자신의 멤버십을 Patreon에서 WordPress(WooCommerce Memberships를 통해)로 점진적으로 이전하고 싶어 합니다. 다른 포럼 게시물들을 통해 이것이 가능하다는 점은 알고 있습니다.

다만, WordPress를 제공자로 설정하여 SSO를 활성화할 경우, WordPress가 포럼에 로그인하는 유일한 방법인지 궁금합니다. WordPress SSO를 활성화하면 Patreon 사용자들이 더 이상 Patreon 계정으로 로그인할 수 없게 되는 건가요? 아니면 두 가지 방법을 동시에 사용할 수도 있나요?

설명이 혼란스럽거나 질문을 올리는 곳이 잘못된 것 같다면 죄송합니다.

미리 감사드립니다!

네, SSO의 첫 번째 S는 Single입니다. 모든 인증은 WordPress가 담당하게 됩니다.

다만, Patreon이 사용자 이메일 주소를 제공한다면, 사용자는 동일한 주소를 사용하여 WordPress에 등록하여 계정에 다시 로그인할 수 있습니다.

Patreon WordPress – WordPress plugin | WordPress.org 플러그인을 사용하여 사용자가 Patreon으로 WordPress 사이트에 로그인할 수 있도록 허용할 수도 있습니다. 이 부분은 테스트해보지 않았지만, WordPress와 Discourse 간의 SSO 로그인이 유지되는 상태에서 사용자가 Patreon으로 WordPress에 로그인하도록 설정하는 것이 가능할 것입니다. 이 방법을 시도해 보다가 작동하지 않는 문제가 발생하면 알려 주시기 바랍니다.

안녕하세요! 이 설정을 테스트해 보았고 기본적으로 잘 작동합니다! :slight_smile:
발견한 유일한 문제는 성공적으로 로그인한 후 Discourse로 리디렉션되지 않는다는 점입니다. 대신 사용자는 WordPress로 돌아갑니다. 사용자가 Discourse로 수동으로 이동한 후 “로그인” 버튼을 다시 눌러야 등록이 완료됩니다. 이 문제를 어떻게든 수정할 수 있을까요?

어떻게 작동하는지 보여주기 위해 동영상을 녹화했습니다 -

테스트해 주셔서 감사합니다. Discourse에 사용자를 로그인하는 데 필요한 SSO 매개변수가 Patreon 로그인 과정에서 제거되는 것으로 보입니다. 만약 그렇다면, 이 문제를 수정할 수 있는 방법이 아마 없을 것입니다.

혹시 이 문제를 수정하려면 WordPress-Patreon 플러그인을 수정해야 할까요? 플러그인 개발자에게 연락하는 것이 가치가 있을까요? :slight_smile:

문제의 원인이 제가 생각하는 것과 같다면, WordPress Patreon 플러그인을 수정하면 문제를 해결할 수 있습니다. 제가 문제의 원인으로 추정하는 것은 WordPress Patreon 플러그인이 Patreon 로그인 요청과 함께 전송되는 sso 및 sig 쿼리 파라미터를 제거하고 있다는 점입니다. 이 문제에 대해 해당 플러그인의 개발자에게 문의하는 것이 도움이 될 수 있습니다.

그 전에, 현재 WordPress에 로그인되어 있지 않은 사용자가 _Discourse_의 로그인 버튼을 클릭했을 때 WordPress 로그인 페이지로 이동하는지 확인해야 합니다. 사용자가 그 후 Patreon 로그인 옵션을 선택하면 WordPress에는 로그인되지만 Discourse에는 로그인되지 않습니다. 참고로, Discourse 사이트가 비공개로 설정되어 있다면 사용자가 Discourse 사이트로 직접 접근할 때 위와 같은 상황이 발생합니다. 이 경우 사용자는 Discourse에서 로그인 버튼을 볼 수 없습니다.

안녕하세요! Patreon 플러그인 개발자에게 보고서를 제출했습니다 - Redirecting not working when using together with Discourse SSO - Wordpress Plugin - Patreon Developers

네, 확인했습니다:

  • 현재 WordPress에 로그인되어 있지 않은 사용자가 Discourse의 로그인 버튼을 클릭하면 WordPress 로그인 페이지로 이동합니다 - :white_check_mark: 예

  • 사용자가 Patreon 로그인 옵션을 선택하면 WordPress에 로그인됩니다 - :white_check_mark: 예

  • 하지만 Discourse에는 로그인되지 않습니다 - :white_check_mark: 예 - 위 영상 0:32 부분에서 사용자가 로그인되어 있지 않은 것을 확인할 수 있습니다.

음, Patreon 로그인 문제를 "해결"하는 우회 방법을 찾았어요. 아래에 방법을 설명할게요. :slight_smile:

필요한 것:

  • 로그인 폼을 표시하기 위한 shortcodes를 제공하는 어떤 플러그인 (제 사이트에는 WooCommerce가 설치되어 있어서, 로그인하지 않은 사용자를 위해 정확히 이 역할을 하는 [woocommerce_my_account] shortcodes를 사용했어요).
  • 사용자가 로그인했는지 여부에 따라 콘텐츠를 숨기거나 표시하기 위해 [members_logged_in]과 [members_not_logged_in] shortcodes를 제공하는 Members 플러그인. 비슷한 shortcodes 기능을 제공하는 다른 플러그인을 사용해도 됩니다.
  • Shortcode Redirect 플러그인.

핵심 아이디어는 로그인하지 않은 사용자에게 로그인 폼(그리고 Patreon 로그인 버튼)을 표시하는 특수 페이지를 만드는 것입니다. 사용자가 로그인된 상태라면, https://community.morevnaproject.org/session/sso?return_path=%2F URL로 리다이렉트되어야 합니다.
(물론 "community.morevnaproject.org"는 본인의 도메인으로 대체해야 합니다).

제 특수 로그인 페이지의 내용은 다음과 같습니다:

[members_not_logged_in]
   [woocommerce_my_account]
   [patreon_login_button]
[/members_not_logged_in]
[members_logged_in]
   [redirect url='https://community.morevnaproject.org/session/sso?return_path=%2F' sec='0']
[/members_logged_in]

(여기에서 실제 동작을 볼 수 있습니다 - Log In / Register — Morevna Project)

그 다음, WP-Discourse 플러그인을 설정하여 SSO에 해당 페이지를 사용하도록 하면 됩니다.

사용자가 Discourse에서 “로그인” 버튼을 클릭하면 제 특수 WordPress 페이지로 리다이렉트됩니다. 사용자가 로그인되지 않은 상태이므로 로그인 폼이 표시됩니다. 사용자가 “Patreon으로 로그인” 버튼을 클릭하면 인증을 위해 Patreon으로 리다이렉트됩니다. 인증이 성공하면 제 특수 페이지로 다시 리다이렉트됩니다. 이제 사용자가 로그인된 상태이므로 “redirect” shortcodes가 활성화됩니다:

[redirect url='https://community.morevnaproject.org/session/sso?return_path=%2F' sec='0']

…그리고 사용자는 성공적으로 discourse 포럼으로 리다이렉트됩니다.

URL 끝부분의 session/sso?return_path=%2F 부분은 필수적입니다. 그렇지 않으면 리다이렉트 후 Discourse가 사용자를 로그인된 상태로 인식하지 못합니다.

이것으로 끝입니다! WordPress SSO와 Patreon 로그인을 웹사이트에서 사용하려는 다른 사용자에게 도움이 되기를 바랍니다. :slight_smile:

잘 찾아냈네요 :+1:

하신 일을 깎아내리려는 건 아니지만, 제 첫인상은 이 시점에서 외부 인증 서비스(예: okta.com 또는 auth0.com) 사용을 고려해야 한다는 것입니다. 서로 다른 세 가지 서비스(예: Patreon, Wordpress, Discourse)를 연결하여 한 번에 단일 인증을 달성해야 하는 단계에 도달했다면, 전용 인증 솔루션을 고려해야 한다는 신호입니다. 어떻게든 구현할 수 있을지 모르겠지만, 장기적으로 솔루션이 깨지거나 모든 경우에 작동하지 않을 상당한 리스크가 있습니다.

그래도 이 방향으로 진행하시길 원하신다면 몇 가지 제안이 있지만, 다소 기술적으로 깊어질 수 있다는 점에 유의해 주세요. 다른 분들도 이 문제를 마주하고 더 깊이 파고들고 싶어 할 경우를 대비해 여기에 추가합니다.

Patreon Wordpress 플러그인 코드를 간단히 살펴봤는데, 그들의 OAuth 플로우가 state 파라미터 내에 final_redirect_uri 키/값을 허용하는 것 같습니다. 이를 통해 Patreon 인증에서 Discourse SSO로 바로 이동할 수 있으며, 위에서 언급한 Members 및 Redirect 플러그인의 필요성을 제거하고 해당 접근 방식에서 발생할 수 있는 문제를 회피할 수 있습니다.

많은 인증 서비스가 final_redirect_uri 파라미터의 변형(즉, 인증 후 사용자가 어디로 보내질지를 변경할 수 있는 파라미터)를 제공합니다. 동일한 문제를 해결하려고 하지만 다른 서비스(즉, Patreon이 아닌 경우)를 사용하고 있으며, 세 가지 다른 서비스를 연결하는 것에 대한 제 경고가 해당되지 않는다고 판단하셨다면, 그곳을 살펴봐야 합니다.

즉, Patreon 로그인 버튼을 생성하는 단축코드가 final_redirect_uri를 인수로 받아서 Patreon이 최종적으로 사용하는 로그인 URL에 전달되도록 해야 합니다. Patreon Wordpress 플러그인 코드를 보면 실현 가능한 제안입니다. 참고로, Patreon URL을 생성하는 관련 함수는 다음과 같습니다:

Patreon_Frontend::patreonMakeLoginLink(false, array( 'final_redirect_uri' => # ) );

기본적으로 코드는 이미 커스텀 final_redirect_uri 처리를 위해 부분적으로 설정되어 있습니다. Patreon Wordpress 플러그인 개발자가 이를 추가하고 싶지 않을 수 있다는 점은 이해할 수 있지만, 여기서 설명한 내용을 설명할 수 있을 만큼 자신감이 있다면 그들의 GitHub 저장소에 이슈를 생성하는 것이 가치가 있을 수 있습니다. 그렇지 않다면, 위에서 언급한 함수를 사용하여 링크를 직접 생성하고 자체 버튼을 만들 수 있습니다(또는 Wordpress 개발자를 고용하여 처리할 수 있습니다).

SSO URL 구성에 대해 작은 참고 사항 하나만 드리자면, 아래처럼 사용하는 것이 더 명확합니다.

https://discourse.example.com/session/sso?return_path=/

대신

https://discourse.example.com/session/sso?return_path=%2F

마지막 부분인 return_path는 로그인 후 Discourse에서 사용자를 보내는 경로입니다. /인 경우 포럼 홈 페이지로 이동합니다. SSO URL 구성에 대해 더 자세히 알아보려면 WP Discourse 팁과 트릭을 참고하세요.

+1 네, 리스크가 있습니다! :slight_smile:

와, 이렇게 자세한 설명을 해주셔서 정말 감사합니다! 그렇다면 [patreon_login_button] 단축코드를 수정하여 final_redirect_uri 파라미터를 받도록 하고, 그들의 GitHub 저장소에 PR을 만드는 것이 합리적인 것 같습니다. 시간을 내어 설명해 주셔서 다시 한번 감사합니다!