프로필에 인증된 제3자 계정을 추가하는 최선의 방법

기본적으로, OpenID나 OAuth가 없는 소셜 계정(예: Riot 계정)의 소유자가 사용자인지 확인하는 방법을 찾고 있습니다. 이를 위해 가장 좋은 접근 방식은 무엇일까요? 사용자가 외부 앱에서 데이터베이스를 수정할 때 Discourse를 OAuth 제공자로 사용할 수 있을까요? 아직 Discourse에 익숙하지 않아서 이와 유사한 기능을 구현하는 가장 좋은 방법을 고민하고 있습니다.

@falco가 Riot에 대한 경험이 있다고 생각해요?

정말 흥미로운 문제네요. 우리가 실험해 본 한 가지 접근 방식은 Keybase를 사용하는 것이었습니다. Keybase에는 이미 다양한 플랫폼과 호환되는 견고한 신원 증명 시스템이 있습니다. 우리의 실험에 대해서는 Discourse Keybase Proof에서 읽어보실 수 있습니다. Zoom이 인수한 이후 현재 상황은 어떻게 변했는지 확실하지는 않습니다.

이 부분은 조금 이상하게 느껴집니다. Discourse가 Riot의 IdP(신원 제공자) 역할을 한다고 해서, Discourse에서 기존 Riot/Matrix 계정을 소유하고 있음을 어떻게 증명할 수 있겠습니까?

조금 더 자세히 설명해 주실 수 있을까요? 어제 Matrix SSO에 대해 살펴보고 있었는데, 마침 최근에 관련 기능이 추가되었습니다. SAML과 develop 브랜치에서 oAuth2를 모두 구현했습니다. Discourse는 서버로서는 통신할 수 없고 클라이언트로만 동작할 수 있으므로, Discourse가 oAuth2 서버 역할을 하도록 하거나 Synapse에 Discourse 자체 SSO 프로토콜 지원을 추가하는 방안을 검토하고 있었습니다. 이것이 여러분의 요구사항을 충족시킬 수 있을지는 확실하지 않습니다…

Riot에서 사용자가 제어할 수 있는 공개 URL이 있을까요? 예를 들어, 사용자가 코드를 삽입할 수 있는 공개적으로 접근 가능한 프로필(Bio) 같은 것 말입니다. 그러면 Discourse 플러그인이 코드를 생성하고, 사용자는 그 코드를 자신의 프로필에 삽입한 후 Riot 사용자명을 입력하면 URL/<riot-username>/bio에서 해당 코드를 확인할 수 있겠죠?

이러한 시스템은 여러 설정을 통해 여러 제3자 사이트에서 사용할 수 있는 범용 플러그인을 만들 수 있게 해줍니다.

채택을 지지하는 표준은 "양방향 링크 rel="me""입니다. 해당 페이지에서 Discourse 프로필로, 그리고 Discourse 프로필에서 해당 페이지로 링크를 추가하면, 두 시스템이 서로의 URL을 크롤링하여 rel=me를 확인하고 :white_check_mark: 인증됨으로 표시합니다.

이 표준을 구현하지 않는 플랫폼에서 자기소개(bio) 필드를 가져오는 경우를 위한 특수 처리를 마련할 수 있습니다.

제가 말한 것은 Discourse가 제 단독 프로그램의 IdP로 사용되는 경우입니다. 아직 공개된 OAuth 솔루션이 없어서 Riot Games ID와 같은 것을 연결하는 가장 좋은 방법이 무엇인지 확신이 서지 않습니다. RSO가 방금 발표된 것은 알고 있지만, 공개될 일정에 대해서는 아직 알려진 바가 없습니다.

현재 제3자 애플리케이션이 Riot 계정을 "확인"하려면 사용자가 League of Legends 클라이언트에 로그인하여 설정 탭의 특정 필드를 변경해야 합니다. 저는 Discourse에서 League API로 이동한 후, 값이 확인되면 사용자 지정 프로필 필드를 추가하는 방법을 고민하고 있었습니다.

참고로 코드가 필요한 부분은 다음과 같습니다. 기본적으로 League API를 호출하여 이 코드의 값이 사용자에게 지시된 값과 일치하는지 확인할 수 있습니다.

또한, 제 Discourse는 웹사이트 나머지 부분과 연동되므로 SAML 로그인 시스템을 사용 중입니다. 비슷한 방식으로 “확인된” Discord 사용자 이름을 추가하는 방법을 찾고 있었습니다. 다시 말하지만, Discourse에 로그인한 사용자가 Discord OAuth를 통해 OAuth를 트리거하고, 그 후 Discourse 측에서 값을 변경하는 과정을 어떻게 구현해야 할지 확신이 서지 않습니다.

이 정도면 제 의도가 전달되었기를 바랍니다. 만약 제가 하려는 것에 대해 더 많은 정보가 필요하시면 추가로 제공할 수 있습니다. 저는 프로필에 확인된 계정만 표시하길 원합니다. Minecraft(Mojang), Discord, Riot Games(League of Legends) 계정을 포함할 계획인데, 제 용도상 위장 행위를 방지하기 위해 확인된 값이어야 합니다.

Valorant 베타 드롭에 사용된 Twitch ↔ Riot 연결은 login 에서 OAuth2를 사용한 것으로 생각됩니다. client_id를 생성할 수 있을지는 확실하지 않습니다.

음, 커스텀 플러그인을 사용하면 가능해 보입니다!

이것은 우리의 네이티브 Discord 통합 기능을 사용하면 작동할 것입니다. Discord 로그인을 활성화하면 사용자가 프로필에서 자신의 Discord 프로필을 연결할 수 있습니다.

네, 현재는 공개되지 않았고 아직 초기 단계입니다. Riot 개발자 사이트의 이 기사(https://www.riotgames.com/en/DevRel/rso)에서 이에 대해 언급했습니다.

저도 그렇게 생각해서 작동할 수 있는지 시도해 볼 생각입니다.

기본 Discord 연동을 사용하지 않으려는 유일한 이유는, 제 다른 웹사이트들이 이미 메인 IdP를 통해 인증을 처리하고 있기 때문에, 제 웹사이트 전체에서 사용자가 단 하나의 계정만 생성하도록 하고 싶기 때문입니다. 이게 말이 되는지 모르겠네요. League of Legends 플러그인을 작동시킬 수 있는지 확인해 보고, 제가 생각하고 있는 작업을 수행하는 것이 얼마나 어려울지 살펴볼 것입니다. PHP 애플리케이션이나 유사한 환경에서 사용자 프로필에 접근하고 편집할 수 있는 방법이 있는지 확실하지 않았습니다. 궁극적으로, Discord로 로그인하는 간단한 OAuth 로그인 시스템을 PHP로 구현하려고 했는데, PHP 스크립트가 어떤 사용자의 요청인지 “알려 주는” 방법에 문제가 있었습니다. Discourse를 통해 요청을 시작하고 PHP 스크립트가 그 요청이 유효한지 검증할 수 있다면 가능할 것 같습니다.

여기서 답변해 주신 모든 분들께 진심으로 감사드립니다. 제가 직접 Discourse를 관리하는 것은 아직 초보 단계라 모든 도움을 정말 감사하게 생각합니다. :smiley:

음, 플러그인이 API를 통한 외부 프로그램보다 더 많은 접근 권한을 가지고 있는지 확인해 봐야겠어요. https://docs.discourse.org/에서 API를 통해 사용자 필드를 편집하는 방법을 찾지 못했거든요.