Spring/Security

[Security] 시큐리티 프로젝트 로그인 - 로그인 인증방식 통합

석석's 2021. 12. 1. 14:01

https://oneseok.tistory.com/65

 

[Security] 시큐리티 프로젝트 로그인 - OAuth 로그인_naver

https://oneseok.tistory.com/64 [Security] 시큐리티 프로젝트 로그인 - OAuth 로그인_google https://oneseok.tistory.com/63 [Security] 시큐리티 프로젝트 로그인 - 회원가입 및 기본로그인 https://oneseok.t..

oneseok.tistory.com

저번 시간에는 provider를 제공하지 않는 naver의 경우 어떻게 로그인 하는지에 대해 알아 보았다.

 yml에서 직접 provider를 만들고 구글과 달리 결과값이 다른곳에 들어 있어 인터페이스를 만들고 그 인터페이스를 각각OAuth 주체마다 구현클래스를 만들어 처리하였다.

이번시간에는 일반로그인 과 OAuth로그인의 인증방식 통합을 위해  OAuth로그인 결과도 PrincipalDetails 객체로 만들어 Authentication 객체에 넣으려고 한다.

 

1. PrincipalDetails 클래스로 "OAuth2User 인터페이스 구현하기

    - 해당 OAuth2User 인터페이스를 implements 한다.

    - attributes 필드와 생성자를 하나 만들어야한다. 왜냐하면 구현해야할 메소드 중에 리턴타입이 Map인 메소드가 있기때문이다.(getAttributes)

OAuth2User 인터페이스 상속

 

OAuth2User안에 있는 메소드 구현하기

 

 

  - PrincipalOAuth2UserService의 리턴을 사진과 같이 바꾼다.

  - PrincipalOAuth2UserService 리턴타입은 "OAuth2User" 라 상속받은 PrincipalDetails 로 바꿀 수가 있다.

 


2. Controller 에서 인증 객체 받아보기

    - 일반 로그인한 유저나 OAuth로그인한 유저나 똑같히 Authentication객체안에 UserDetails를 상속받은 PrincipaDetails 객체가 들어가 있으니 이렇게 받으면 된다.

 

 

    - /user 로 접속해보면 아래와 같이 표시된다.

 

 

 

만약 이렇게 통합하지 않는다면 아래와같이 일반로그인한 사람 따로 소셜로그인한 사람 따로 컨트롤러를 만들어야하는 불상사가 발생한다... 이건 진짜 최악이고 사실상 서비스 할 수 없는 형태이다.

 

 

 

이번시간은 여기서 마치고 다음 시간부터는 JWT 에 대해서 한번 시도해 볼 것이다.