다시 공부 할 OAuth 2.0

정 승 연·2023년 1월 19일
0

목록 보기
3/9

OAuth 2.0 의 구성요소

- Resouce Owner : 사용자
- Client : 외부 플랫폼 = 웹 서비스
- Authorization Server : 인증 서버
- Resource Server : 사용자 자원 제공 해주는 서버

사용자가, 외부 플랫폼에 로그인하려는 경우, 외부 플랫폼이 인증 서버에 인증 요청을 하고, 외부 플랫폼은 사용자 정보를 사용할 수 있는 권한을 얻게 된다.

OAuth 2.0 인증 종류

- 권한 코드 승인 방식
    - Authorization Code 이용해 Access Token 요청하는 방식. Access Token이 바로 클라이언트로 전달되지 않기 때문에 다른 방식보다 보안에 좋음
- 암식적 승인 방식
    - 권한 코드 검증이 들어가지 않기때문에 Read Only에서만 사용하는것이 좋음
- 비밀번호 자격 증명 방식
    - Client에 구글 아이디 비밀번호를 저장해두고 사용하는 방식
- 클라이언트 자격 증명 방식

시퀀스 설명

1. 소셜 로그인 요청
2. 백엔드로 GET “ /oauth2/authorization/{provider-id}?redirect_url=http://localhost:8080/oauth/redirect 로 OAuth 인가 요청
3. Provider별로 Authorization Code 인증할 수 있도록 리다이렉트
    
    (Redirect: GET “[https://oauth.provider.com/oauth2.0/authorize?…”](https://oauth.provider.com/oauth2.0/authorize?%E2%80%A6%E2%80%9D))
    
4. Redirect 화면에서 Provider 서비스에 로그인
5. 로그인 완료 후 Athorization server로부터 백엔드로 Authorization 코드 응답
    
    ex) GET /login/oauth2/code/{provider-id}?code={Authorization code}
    
6. 백엔드에서 인가 코드 이용해 엑세스 토큰 요청
7. 엑세스 토큰 획득
8. 엑세스 토근 이용해 Resource Server에 유저 데이터 요청
    
    ex) https://api.provider.com/user/me
    
9. 획득한 유저 데이터를 DB에 저장 후, JWT 엑세스 토큰과 리프레시 토큰을 생성
10. 리프레시 토큰은 수정 불가능한 쿠키에 저장하고, 엑세스 토큰은 프로트엔드 리다이렉트 URI 에 쿼리스트링에 토큰을 담아 리다이렉트 (Redirect: GET http://localhost:3000/oauth/redirect?token={jwt-token})
11. 프론트엔드에서 토큰을 저장 후, API 요청 시 헤더에 `Authroization: Bearer {token}`을 추가하여 요청
12. 백엔드에서는 토큰을 확인하여 권한 확인
13. 토큰이 만료된 경우, 쿠키에 저장된 리프레시 토큰을 이용하여 엑세스 토큰과 리프레시 토큰을 재발급

출처 : https://deeplify.dev/back-end/spring/oauth2-social-login

0개의 댓글