SSO JWT - 그룹 전달

GitHub - discourse/discourse-jwt: Discourse Auth support for JSON Web Tokens (JWT) · GitHub 플러그인을 사용해 커스텀 JWT 서비스로 인증을 처리하고 있습니다.

사용자 로그인 자체는 정상적으로 작동하지만, groups 키를 전달해도 아무 효과가 없는 것 같습니다. ManagedAuthenticator 코드를 살펴봐도 그룹과 관련된 로직을 찾을 수 없었습니다.

무언가가 누락된 건지, 아니면 제 이해가 잘못된 건지 확인해 주실 수 있을까요?

감사합니다!

누락된 것이 아닙니다. JWT 플러그인은 그룹을 전달하는 기능을 지원하지 않습니다. 이를 가능하게 하려면 플러그인에 대한 개발 작업이 필요합니다.

@david 플러그인을 작성해 본 적 없는 사람이 이 작업을 수행하는 것이 얼마나 어려운지 어떻게 생각하시나요? 이름으로 가져오는 것, JWT에서 가져온 그룹, discourse에서 가져온 것, 그리고 쿼리 결과(그룹 객체)를 user.groups에 할당하는 것만으로 가능한가요? 플러그인에 대해 어느 정도 익숙합니다(그다지 복잡하지 않으므로) 이 작업을 해볼 수 있을 것 같습니다.

또한, 이 작업을 진행해야 할까요? JWT를 가지고 있다면 OpenID Connect를 통해 인증할 수 있나요?

어떻게 동작하도록 하느냐에 따라 달라집니다… 아마도 JWT가 임의로 멤버를 제거하지 않도록 Discourse에서 일반 그룹도 정상적으로 생성할 수 있기를 원할 것입니다. 저희의 네이티브 Discourse SSO 시스템에서는 "add groups"와 "remove groups"라는 두 가지 파라미터로 이 문제를 해결합니다.

https://github.com/discourse/discourse/blob/master/app/models/discourse_single_sign_on.rb#L159-L179

JWT 플러그인의 경우, 인증기의 after_authenticate 함수에 이 로직을 추가하는 것이 좋습니다. 기존 기능이 올바르게 동작하도록 super를 호출하고 그 응답을 반환하는 것을 잊지 마세요. 이러한 오버라이드의 예는 여기에 있습니다.

좋아요! 제가 원했던 정보를 얻었습니다. 나머지는 제가 알아서 해볼 수 있을 것 같아요. 감사합니다!

이 문제를 진행하셨나요? JWT만 사용하여 SSO를 구현하는 방법이 궁금합니다.

discourse-jwt 플러그인은 정상적으로 작동합니다. 다만, 이유를 알 수 없으나 HS256 알고리즘만 지원하도록 설계된 것 같습니다. 다른 알고리즘으로 작동하도록 수정하는 것은 그리 어렵지 않습니다.

제가 직접 테스트해 본 저장소를 참고해 보세요. discourse-jwt/plugin.rb at master · arivanandan/discourse-jwt · GitHub