1. OAuth
- 리소스 오너(resource owner) : 자신의 정보를 사용하도록 인증 서버에 허가하는 주체 ex) 서비스 이용자
- 리소스 서버(resource server) : 리소스 오너의 정보를 가지는 주체 ex) 네이버, 구글
- 인증 서버(authorization server) : 클라이언트에게 리소스 오너의 정보에 접근할 수 있는 토큰 발급
- 클라이언트 애플리케이션(client application) : 인증을 받고 리소스 오너의 리소스를 사용하는 주체 ex) 서비스
2. 권한 부여 코드 승인 타입
-클라이언트가 리소스 오너의 정보를 취득하는 대표적인 인증 방법
- 권한 요청 : 클라이언트가 특정 사용자 데이터에 접근하기 위해 권한 서버에 요청을 보내는 것 ex) client_id, redirect_url, response_type, scope
- 데이터 접근용 권한 부여 : 권한 부여 서버는 데이터에 접근할 수 있도록 인증 및 권한 부여를 수신
- 인증 코드 제공 : 로그인 성공 시 파라미터에 인증 코드 제공
- 액세스 토큰 응답 : 인증 코드를 액세스 토큰(로그인 세션에 대한 보안 자격을 증명하는 식별 코드)으로 교환 ex) client_secret, grant_type
- 액세스 토큰으로 API 응답&반환 : 액세스 토큰으로 API 호출을 통해 리소스 오너의 정보를 가져오고, 리소스 서버는 토큰의 유효성 검사 후 반환
3. 쿠키
- 서버에서 사용자의 로컬 환경에 저장하는 작은 데이터
- 클라이언트가 서버에 정보 요청 -> 서버가 정보를 값으로 넣은 쿠키 생성 -> 브라우저에 쿠키와 HTTP 헤더 전송
-> 클라이언트가 브라우저에 쿠키 저장
4. 스프링 시큐리티로 OAuth 구현
(1) 쿠키 관리 클래스 구현
-쿠키 추가, 쿠키 삭제, 직렬화(객체를 쿠키의 값으로 들어갈 값으로 변환), 역직렬화(쿠키를 객체로 변환)
-> 쿠키 추가: 요청값(이름, 값, 만료 기간)을 바탕으로 쿠키 추가
-> 쿠키 삭제: 쿠키를 빈 값으로 바꾸고, 만료 시간을 0으로 설정
(2) OAuth2 서비스 구현
-제공받은 인증 객체로 사용자 정보를 가져오는 역할을 하는 서비스
- 사용자 이름 및 관련 키 저장
2. 사용자 조회
->유저 객체를 만들어주는 loadUser를 통해 사용자 객체(식별자, 이름, 이메일 등)를 불러옴
5. OAuth2 설정 파일 작성
-OAuth2, JWT에 맞게 설정 파일 수정
(1) 토큰 방식에 맞도록 기존 기능 비활성화
-> 기존에 사용하던 폼로그인, 세션을 비활성화
(2) 인증 요청과 관련된 상태를 저장할 저장소 구현
(3) 인증 성공 시 실행할 핸들러 구현
-> 생성자를 사용해 직접 생성해서 패스워드를 암호화할 수 있도록 코드 수정
(4)
-> refreshToken: 리프레시 토큰 생성
addRefreshToken: 리프레시 토큰을 쿠키에 저장
accessToken: 액세스 토큰 생성
clearAuthenticationAttributes: 세션과 쿠키에 임시로 저장해둔 인증 관련 데이터 제거
6. 글에 글쓴이 추가하기
(1) author 변수 추가
-> 객체를 생성할 때 글쓴이를 입력받을 수 있도록 함
(2) API에 작성자 추가 저장
(3) 유저 이름 추가 입력/반환
(4) 현재 인증 정보를 가져오는 객체 생성
-> 유저 이름을 가져와서 save() 로 넘겨줌
(5) 글 상세 페이지에서의 글쓴이 정보
(6) 애플리케이션 실행시 데이터 추가