Discourse 플러그인에서 imgur를 위한 OAuth 2 플로우

안녕하세요,

저희 Discourse 인스턴스를 위한 매우 구체적인 플러그인을 개발 중이며 몇 가지 질문이 있습니다.

어느 시점에서 플러그인은 저희 Discourse 토픽 이미지 모음을 Imgur로 전송해야 합니다. 해당 이미지를 수집하는 부분은 이미 완료되었습니다.

현재 Imgur API에서 OAuth2 플로우를 사용하여 인증을 시도하고 있습니다. 이미 플러그인의 관리자 UI를 만들어서 버튼을 누르면 Imgur 계정에 플러그인을 인증할 수 있도록 했습니다. 사용자가 로그인하면 콜백 URL(저의 Discourse 인스턴스와 플러그인에서 생성한 특정 라우트로 설정됨)이 액세스 토큰과 함께 호출됩니다(예시 참조).

http://localhost:3000/admin/plugins/plugin_name/callback#access_token=<token>&...

질문은 이 토큰을 어떻게 가져올 수 있는지에 대한 것입니다. 어디서부터 시작해야 할지 전혀 감이 잡히지 않습니다.

제 이해로는 토큰이 해시 파라미터로 반환되므로 JS 쪽에서 처리해야 한다고 생각합니다. 콜백 URL을 위해 컨트롤러와 라우트를 설정해 보았지만, 그곳에서 URL(특히 해시 부분)을 읽는 방법을 파악하지 못했습니다. (Emberjs 문서나 Stackoverflow에서 유용한 정보를 찾지 못했습니다). 다양한 이벤트 리스너를 설정해 보았지만, 절대 트리거되지 않는 것 같습니다.

두 번째 질문은, 토큰과 리프레시 토큰을 어디에 저장해야 하는지에 대한 것입니다. 플러그인에서 시스템 설정으로 저장할 수 있을까요? PluginStore에 대해 들어 보았지만 Ruby에서만 접근 가능합니다(이는 클라이언트가 서버로 이러한 토큰을 보내기 위해 엔드포인트를 생성해야 함을 의미합니다). 또한, 보안 관점에서 안전한가요?

감사합니다!

수정: 라우트 파일명에 오타(소문자 s 누락)가 있어서 아무것도 실행되지 않았던 것이었습니다…

로컬호스트에 대한 http로는 이 작업을 수행할 수 없습니다. 필요합니다. ngrok: deliver your apps, APIs, and AI on local and prod 같은 도구를 사용하여 https를 시뮬레이션하거나, 도메인을 사용하여 클라우드에서 개발 서버를 https 모드로 실행하는 것이 권장됩니다.

저도 그걸 필요로 할 줄 알았는데, 실제로는 로컬 URL로 제대로 리다이렉트되고 URL에서 토큰을 확인할 수 있습니다.

네, 맞습니다. 클라이언트는 http를 사용할 수 있습니다. 문제는 중간에 가로채져 토큰이 읽힐 수 있다는 점이라, 애초에 OAuth2를 사용하는 데 의미가 없다는 겁니다 :). 개인적으로는 개발 단계에서 최종 프로토콜 전체를 사용해서 코드가 제대로 작동하는지 확인하는 편이 더 마음이 놓입니다.

아, 맞아요, 전적으로 동의합니다. 이 시점에서는 개발 용도로만 사용했거든요. 물론 프로덕션에서는 https를 사용할 거예요 :slight_smile: