회원 - 소셜과 시큐리티를 어떻게 연동할래? + 궁금한 점들

jinvicky·2023년 2월 22일
0

2023 Spring Project TIL

목록 보기
22/32

마이페이지에는 개인정보 수정 기능이 있는데 소셜 로그인의 경우
별도의 비밀번호를 받지 않는다.
그렇다면 개인정보 수정(비밀번호 수정)은 불가능하다.
어떻게 해야 더 맞는 걸까?

해결 방법은 두 가지이다.
1. 일단 회원가입을 비번 빼고 한 다음에 개인정보 수정에서 비번 추가 등의 수정을 한다.
2. 아예 소셜로그인이면 개인정보 수정을 못하게 url, 페이지 막는다.

1은 네이버에서 안된다고 한다. 별도의 비번 요구를 할 수 없다.
그렇다면 네이버 소셜 계정에 비번을 추가하는 것 또한 안될 것이다.
https://help.naver.com/service/23029/contents/20548?lang=ko&osType=COMMONOS

결론: 나는 일반가입회원만 개인정보 수정이 가능하게 세션에 가입타입을 저장할 생각이다. 세션에 타입이 일반이 아니라면 접근을 막는다.

소셜 로그인은 DB 관리를 어떻게 하는 걸까?

소셜 플랫폼이 달라도 이메일이 중복될 경우도 충분히 있다.
그래서 로그인한 플랫폼 유형을 알기 위해서 가입내역, 방문이력 등등의 작은 테이블을 많이 추가했었다. 토큰을 컬럼에 저장해야 할까 생각도 했다.

하지만 아래의 이유로 설계를 바꿨다.

  • 쓸모없는 테이블이다. 로그인타입 하나만을 위해서 두 개의 테이블은 무의미하다.
  • 인증 토큰은 로그인할 때만 사용하고 실제는 토큰을 파싱한 값을 디비에 저장한다. 그리고 시큐리티의 Authentication에 설정하는? 것이 끝이라서 굳이 저장할 이유를 못 찾았다.

https://okky.kr/articles/433730
여기서도 가입유형 컬럼만 남기고 별도로 테이블 관리 안했다고 한다.

UserDetails navervo = (UserDetails)cusd.loadUserByUsername(id);

Authentication authentication = new UsernamePasswordAuthenticationToken(navervo, navervo.getPassword(),navervo.getAuthorities());
            SecurityContext securityContext = SecurityContextHolder.getContext();
            securityContext.setAuthentication(authentication);

위 코드를 보면 UserDetails 객체, 객체 비번, 객체 권한들로 인증 객체를 생성해서 setAuthentication()을 한다.

시큐리티와 소셜 로그인을 어떻게 연동해야 하나 고민했는데
소셜 로그인을 했을 때 생기는 쿠키?를 지워야 했던 걸로 기억하는데
그 부분을 해결하면 로그인 메서드에서 처리하는 authentication 유효성 검사를 제대로 처리할 수 있을 것 같다.

참고자료
시큐리티와 네이버를 연동
https://pulpul8282.tistory.com/m/165
https://terianp.tistory.com/161
https://velog.io/@rnqhstlr2297/Spring-Security-OAuth2-%EC%86%8C%EC%85%9C%EB%A1%9C%EA%B7%B8%EC%9D%B8
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pure137&logNo=220324666012

profile
Front-End와 Back-End 경험, 지식을 공유합니다.

0개의 댓글

관련 채용 정보