작성
·
470
0
안녕하세요 강의 잘 듣고있습니다.
저는 강의에서 사용하고있는 Spring + Thymeleaf 구조를 사용하고 있지않습니다.
spring + react와 같이 백엔드와 프론트로 나누어져 있고 rest api방식으로 통신하는 구조입니다.
구글링해본 결과. rest api 구조에서 소셜로그인을 시도할경우.
대부분 소셜로그인을 전부 프론트에서만 처리하고있었습니다.
즉, Implict Grant Type이죠.
하지만 강의에서 강사님께서 이 방법은 Deprecated되었으며 바람직하지 않다고 하셨습니다.
그래서 저는 Authorization Code Grant Type으로 인증을 받으려 시도했습니다만.
구글링을 해봐도 죄다 Implict 방식만나오고 Code방식은 나오지 않아 어려움을 겪고있습니다.
그냥 모바일앱이나 react와 같은 프론트앱에서는 Implicit Type으로 하는게 최선일까요?
이 강의의 다른 질문글들을 읽어보았는데도 정확한 해결방법은 제시되어 있지 않는것 같아
재차 질문글을 작성하게 되었습니다.
읽어주셔서 감사합니다.
답변 1
0
Implicit Type 이 보안상 취약점이 있는 건 사실입니다.
그래서 RFC 표준에도 제외하고 있습니다.
그런데 Implicit Type + PKCE 조합은 괜찮습니다.
제 강의에서도 PKCE 에 관한 내용을 설명하고 있으니 참고해 주시면 됩니다.
다만 인가서버 쪽에서 PKCE 지원해야 가능합니다.
강의에서 소개해 드린 keycloak 이나 스프링 인가 서버는 PKCE 를 지원하는데 소셜 로그인 기관들에서는 지원하는지 확인해 보시기 바랍니다.
근데 한가지 궁금한 것은
spring + react와 같이 백엔드와 프론트로 나누어져 있고 rest api방식으로 통신하는 구조이면 Authorization Code Grant Type 으로 안되는건가요?
제가 아는 개발자는 위와 동일한 구조에서 Authorization Code Grant Type 으로 구현했던 것으로 알고 있습니다.
스프링 시큐리티 OAuth2 프레임워크를 사용했구요
물론 개발환경이 저마다 다르기 때문에 가능 여부를 정확하게 판단할 수는 없지만 모바일이나 앱 환경에서 Authorization Code Grant Type 을 사용하지 못하는 것은 아닐 것 같습니다.
저의 강의에서 react 로 진행하는 챕터는 없지만 Authorization Code Grant Type 의 원리를 정확하게 이해한다면 충분히 가능할 것 같습니다.
제가 react 예제 소스나 참고할 만한 자료가 없어서 정확한 답변을 드리기는 어려우나 프론트에서 rest api 로 통신하더라도 스프링 시큐리티 OAuth2 가 설치된 서버를 거쳐서 소셜로그인으로 가는 형태이기 때문에 react 든 thymeleaf 든 전체 진행 과정은 거의 동일하고 다만 프론트의 react 와 백엔드 서버 사이에서 어떻게 값을 요청하고 화면에 띄울 것인지, 그리고 응답을 전달할 것인지의 구조적인 부분이 이슈가 될 뿐 OAuth2 자체의 문제는 아닐 것이라 봅니다.
이도 저도 여의치 않아서 Implicit Type 을 사용해야 한다면 하되 이 방식은 토큰이 브라우나 네트워크 상에 바로 노출되는 방식이기 때문에 유출 위험성을 감안하여 보안적으로 안전한 방편을 마련해서 진행해야 합니다.