외부서비스의 인증 및 권한부여를 관리하는 프레임워크입니다!
→ Open Authentication, Open Authorization라고 해요. (인증과 허가를 포함해요!)
클라이언트
와서버
사이에 인증(로그인)을 하면 서버가access_token
을 줍니다.클라이언트
는access_token
을 이용해서 API 요청을 할 수 있어요.서버
는 API 요청을 받고,access_token
을 가지고 권한이 있나 없나 확인해서 결과를클라이언트
에 보내줍니다.
👉 유저가 구글 로그인을 하는 상황이라고 가정하고 생각해봅시다!
여기서 구글은 유저의 정보도 가지고 있을거고, 로그인을 검증도 해줄거예요.
그러니까 구글은 Resource Server(자원 서버) + Authorization server(권한 서버)입니다.
유저는 그 정보를 가진 사람이니 Resource Owner(자원 소유자)라고 부릅니다.
(구글에서 주는 유저 정보는 Resource(자원)이라고 부릅니다.)
- 유저가
구글
로그인을 합니다.
- 자원 소유자가 자원서버에 권한 요청을 한거죠!
구글
은 로그인할 때 유저가 입력한 정보(아이디, 비밀번호 등)을 보고클라이언트(우리 웹사이트!)
에 접근 권한을 줍니다.클라이언트
는 이 권한을 가지고Authorization server(권한 서버)
에access_token
을 요청합니다.클라이언트
는 이access_token
을 가지고 구글에서유저 정보
를 가져올 수 있어요.구글
은클라이언트
가 보낸access_token
을 가지고 권한이 있나 없나 확인해서결과
를클라이언트
에 보내줍니다.
토큰의 한 형식입니다! 데이터가 JSON 형태로 이루어져 있는 토큰이에요.
- 생김새 : [header].[payload(내용)].[signature(서명)]
- header: 토큰 타입과 암호화 방식 정보가 들어갑니다.
- payload: 토큰에 담을 정보가 name: value 쌍으로 들어갑니다.
- signature: 서명 정보입니다. secret key를 포함해서 header와 payload 정보가 암호화 되어 들어갑니다.
- 동작 방식 : 토큰 기반 동작 방식대로 움직여요!
- 유저가 로그인을 시도하면,
- 서버가 요청을 확인하고 secret key를 가지고 access_token을 발급합니다.
- 클라이언트에 JWT를 전달하고
- 클라이언트는 API 요청을 할 때 Authorization header에 JWT를 담아서 보냅니다.
- 서버는 JWT의 서명을 확인하고 payload에서 정보를 확인해서 API 응답을 보냅니다.