새로운 팀 프로젝트를 시작하게 되었는데 첫 회의에서 또 벙어리가 되었다..😭
모르는 용어 가득.. 모르는 기능 가득..
이렇게 또 모르는게 가득해버려서 공부할게 잔뜩 생겼다.
이번 팀 프로젝트는 회원가입과 로그인을 카카오를 이용해서 하기로 했는데,
OAuth는 들어봤는데 계속 인가라는 표현이 나왔다.
인가가 도대체 뭐지..
그래서 정리해본다.
인증: 유저가 누구인지 확인하는 절차 (회원가입 로그인)
인가: 유저에 대한 권한 허락
인증과 인가는 어떤 사용자가 어떻게, 언제 서비스를 사용하는지 추적하기 위해 사용한다.
이번 프로젝트에서는 JWT를 이용해서 일정 시간동안 인가에 유효한 정보로 대체하는 방법을 사용하기로 했다.
회원가입 후 JWT를 이용한다고 하는데 도대체 JWT가 뭐지..?
정보를 비밀리에 전달하거나 인증할 때 사용하는 토큰으로 Json 객체를 이용한다.
클라이언트와 서버 사이 통신할 때 권한을 위해 사용하며, 주로 사용자의 인증 또는 인가 정보를 서버와 클라이언트 간 안전하게 주고받기 위해 사용한다.
보통 Authorization(인가) HTTP 헤더 값으로 Bearer + <토큰>
으로 값을 받아와 사용할 수 있다.
서버에는 토큰에 포함되어있는 서명 정보를 통해서 위변조 여부를 빠르게 검증할 수 있다.
토큰은 요청 헤더의 Authorization: 에 담아져서 보내진다.
위의 Bearer
은 바로 type에 해당한다.
토큰은 다양한 종류가 있기 때문에, 서버는 type에 따라 토큰을 다르게 처리해야한다.
간단하게 Basic, Bearer, Digest만 다루겠음
사용자의 아이디와 비밀번호를 Base64
로 인코딩한 값을 토큰으로 사용한다.
JWT나 OAuth에 대한 토큰을 사용한다.
서버에서 난수 데이터 문자열을 클라이언트에게 보낸다. 그럼 클라이언트는 사용자 정보등을 포함하는 해시값을 사용하여 응답한다.
JWT는 header(헤더), payload(페이로드), signature(서명)으로 구성되며,
,
로 구분된다.
헤더는 토큰의 유형과 서명 알고리즘에 명시된다.
헤더를 디코딩해보면
{
"alg": "HS256",
"typ": "JWT"
}
``