안녕하세요
제가 하려는 일이 실제로 가능한지 궁금합니다.
Discord나 Google 등을 연동하듯, Minecraft 계정을 Discourse 계정에 연결하고 싶은데요. 현재 Minecraft에는 OAuth 시스템이 없습니다(모든 사용자가 Microsoft 계정으로 이주하면 가능하겠지만, 그건 좀 더 기다려야 할 것 같고요). 그래서 제가 제안하는 방식은 사용자가 게임 내에서 받는 무작위 생성 코드를 입력하는 것입니다. 이렇게 하면 다른 연결된 계정처럼 이 정보를 해당 계정에 추가할 수 있을까요? https://mc-oauth.net/ 의 구조와 유사하게 구성하되, 로그인 대신 채팅에서 명령어를 사용하는 방식으로 할 계획입니다.
이것이 가능하다면 어떻게 구현할 수 있는지 조언을 구합니다. 기본적으로는 코드를 입력하도록 요청하는 모달 팝업 → 코드 검증 → UUID를 가져와서 외부 계정 식별자로 저장하는 흐름이 필요할 것 같습니다.
수정: Microsoft 계정으로의 전환 덕분에 기존 Microsoft 계정 플러그인을 수정하여 Minecraft UUID를 저장할 수 있을지도 모르겠습니다. 확인해 봐야겠습니다.
이 작업을 위해 사용자 정의 필드를 사용하는 것이 어떨까요? Creating and configuring custom user fields
회원가입 시 필수로 설정된 사용자 필드를 통해 무작위로 생성된 코드를 입력받을 수 있습니다. 기존 계정에 코드를 추가해야 하는 경우, 회원가입 후에도 사용자 설정에서 사용자 필드를 수정할 수 있습니다.
오오, 그 부분은 정말 생각도 못 했네요. 아이디어를 알려주셔서 감사합니다. OAuth 방식을 찾고 있었던 주된 이유는 외부 ID를 통해 사용자를 조회할 수 있기 때문이었거든요. 이제 사용자 필드를 통해 사용자를 조회할 수 있는지 확인해 볼 예정입니다.
수정: 네, 커스텀 필드를 활용해서 이걸 처리할 수 있는 방법이 있을 것 같네요. 아마 외부 데이터베이스를 사용해서 Minecraft UUID로 Discourse 사용자를 조회하는 방식을 직접 만들어야 할 것 같습니다. 다만 Discourse의 제한 사항에 대해 충분히 알지 못해서 더 나은 방법이 있는지 판단이 안 섭니다.
수정 2: 음, API를 통해 커스텀 사용자 필드를 수정하는 방법을 찾지 못하겠습니다. 이상적으로는 API를 통해서만 값이 설정되도록 해서 해당 계정이 사용자에게 속해 있다는 것을 보장하고 싶었거든요. 결국 외부 데이터베이스를 만들고 다른 방식으로 계정 연동을 처리해야 할 것 같습니다.
원하시는 것이 자체 OAuth 제공자를 구현하는 것인 것 같습니다.
여기 있는 다이어그램과 비슷합니다:
사용자 정의 메커니즘이 "oAuth2 디렉터리"의 역할을 대신하게 될 것 같습니다.
(DiscourseConnect를 사용하는 것이 더 간단할 수 있습니다)
물론 이는 사이트 인증을 현재 어떻게 구현하고 있는지에 따라 달라집니다.
반면에, 그렇게 하는 것이 상황을 지나치게 복잡하게 만들 수 있습니다 — 여기에는 적합할 수 있는 스태프 전용 사용자 정의 필드를 지원하고 있습니다.
네, 제가 가장 궁금한 점은 스태프 전용인 경우 해당 필드를 어떤 API 경로를 통해 설정할 수 있는지에 대한 것입니다. 자동으로 설정하는 방법을 찾을 수 없었거든요.
docs.discourse.org에서 이 항목에 대한 문서를 찾지 못했습니다. 웹 브라우저를 통해 이루어지는 모든 변경 사항은 동일한 API를 사용하므로, 필요한 내용을 역설계하는 방법을 확인해 보시는 것을 권장합니다.
오, 정말 유용하네요. 공유해 주셔서 감사합니다! 그래서 이걸 어떻게 할 수 있을지 더 고민하고 조사해 봤는데, 제 생각에는 OAuth의 state 매개변수를 사용하여 사람들이 자신의 Discourse 계정에 로그인하도록 하고, 그 state를 이용해 Minecraft의 UUID와 연결하는 방식이 좋을 것 같습니다. state는 데이터베이스에 Minecraft UUID와 함께 존재하는 무작위로 생성된 값이면 됩니다. 이 방식이 효과적일 것이라고 생각합니다. 아이디어와 자료를 공유해 주신 모든 분께 감사합니다!
Discourse 내부에서 Minecraft UUID에 접근할 필요가 없었기 때문에, 결국 Discourse SSO와 통합되는 외부 시스템을 만들었습니다. 도움을 주셔서 감사드립니다. 제가 만든 것을 확인하고 싶으시다면 여기에서 공유해 두었습니다. 언젠가 모든 Minecraft 사용자에게 Microsoft 계정이 필수로 요구되는 날이 오면, Microsoft의 API를 활용해 동일한 기능을 구현할 수 있는 방법이 분명히 있을 것이라 생각하므로 그때 이 문제를 다시 다뤄볼 수도 있을 것입니다.