포스트레이아웃
로그인 token
2023-08-03
🏷️ table of Content
📌1. 로그인에서 토큰이란?
인증 및 권한 부여를 위해 사용되는 보안 요소이다.
웹 애플리케이션, 모바일 앱 또는 다를 서비스에 사용자가 로그인할 때 사용되는 인증 정보를 나타낸다.
로그인 토큰은 일반적으로 사용자가 로그인 세션을 유지하는 동안 발행되며 인증된 요청을 보낼 때마다 함께 전달되어 해당 사용자의 신원을 확인하고 접근 권한을 부여한다.
여기서 인증과 인가에 대해 설명하자면
인증 (Authentication)
식별 가능한 정보로 서비스에 등록된 유저의 신원을 입증하는 과정.
예를 들어 온라인 서비스에 로그인할 때 사용자는 아이디와 비밀번호를 입력하는데 이때 서비스는 입력받은 정보가 실제로 해당 사용자의 정보인지 확인하여 사용자의 신원을 검증한다. 즉,내가 누구인지를 확인하는 과정이라고 생각하면 좀 더 이해하기 쉬울거 같다.
예시) 은행의 ATM 기기에 카드와 비밀번호를 입력하여 자신의 계좌에 접근하는 것이 인증
인가 (Authentication)
인증된 사용자가 특정 리소스나 기능에 접근할수 있는 권한을 부여받는 과정.
즉, 인증된 사용자가 어떤 작업을 수행할 수 있는지 결정하는 과정 이라고 할 수 있다.
예시) 은행의 인터넷 뱅킹에 로그인하여 자신의 계좌 잔액을 확인하거나 송금할 수 있는것은 인가된 사용자에게만 허용된다. 따라서 인증된 사용자는 자신의 계좌정보를 열람하고 돈을 송금하는 등의 권한을 부여받게 된다.
📌 2. 로그인 토큰 유형 (세션과쿠키 , JWT)
유저가 로그인을 시도할 때 서버상에서 일치하는 유저 정보를 찾았다면 인증의 표시로 세션이나 토큰을 발급/ 전달해준다.
그럼 웹브라우저 측에서 해당 세션/토큰 정보를 받아 간직하고 있다가 새로운 request를 보낼때마다 인가(Authorization)확인의 표시로 세션이나 토큰을 발급/ 전달해준다.
2-1) 세션(Session) 과 쿠키(Cookie)
세션(Session) ❓
세션은 서버 측에서 일정시간동안 사용자의 상태를 유지하는 매커니즘으로 , 사용자(브라우저)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지시키는 기술이다.- 클라이언트가 서버에 처음 접속하면 서버는 해당 클라이언트를 식별하기 위해 고유한 세션 ID를 생성한다.
- 서버는 세션 ID를
쿠키를 통해 클라이언트에게 전달하거나, URL 파라미터에 담아서 클라이언트에게 보낸다. - 이후 클라이언트가
서버에 요청을 보낼 때마다 세션 ID를 함께 전달해 서버가 해당 세션을 식별하고 상태를 유지할 수 있게 된다. - 세션은 서버 측에서 관리되므로, 클라이언트가 수정할 수 없고 상대적으로 안전하다.
- 사용자가 로그아웃하거나 세션이 만료되면 서버는 해당 세션을 제거하고 상태를 삭제한다.
쿠키(Cookie) ❓
- 쿠키는
클라이언트 측에서 상태를 유지하기 위해 사용되는 작은 데이터 조각이다. - 서버가 클라이언트에게 응답할 때, 쿠키를 HTTP헤더에 포함시켜 클라이언트에게 전달한다.
- 클라이언트는 받은 쿠키를 자신의 브라우저에 저장한다.
- 쿠키는 클라이언트 측에서 관리되므로, 클라이언트가 쿠키의 내용을 확인하거나 수정할 수 있다.
- 쿠키는 만료 날짜/시간을 설정해 일정 기간 동안 유효하게 할 수 있고 만료기간을 설정하지 않으면 브라우저가 종료될 때까지 유지된다.
세션과 쿠키는 보안과 개인 정보 보호를 위해 적절하게 사용해야 한다.
아, 물론 세션만 이용해서 인증정보를 저장하고 관리할 수도 있고 쿠키만으로도 인증정보를 저장/관리 할 수도있다.
민감한 정보는 세션을 이용해 서버 측에서 관리하는 것이 안전하며 쿠키는 세션ID와 같은 작은 데이터를 유지하는 용도로 사용하면 유용하다고 한다.
요약
- 세션은 사용자의 로그인 이후 로그아웃 혹은 로그인 만료까지의 기간이다.
- 서버가 세션 아이디를 기록하는 방법에는 쿠키가 있다. 그래서 세션ID를 쿠키로 전달하거나 URL파라미터에 담아서 클라이언트에 보낸다.
- 쿠키는 HTTP의 비상태성을 보완하기 위해 서버가 사용자의 웹브라우저에 전송하는 작은 데이터 조각이다.
2-2) JWT(JSON Web Token) ❓
인증에 필요한 정보들을 암호화 시킨 JSON토큰을 의미- 토큰 기반 인증 시스템은 클라이언트가 서버에 접속을 하면 서버에서 해당
클라이언트에게 인증되었다는 의미로 '토큰'을 부여한다. - 이 토큰은 유일하며 토큰을 발급받은 클라이언트는 또 다시 서버에 요청을 보낼 때 요청 헤더에 토큰을 심어서 보낸다.
- JWT기반 인증은 세션을 서버에 저장하지않고
클라이언트 측에서 토큰을 관리하는 방식이다. - JWT는 클라이언트 측에서 관리되기 때문에 서버 자원을 덜 사용하고 확장성이 높을 수 있다.
- JWT구조는 . 을 구분으로 세가지 문자열의 조합인데
Header,Payload,Signature를 각각의미한다.


jwt 구조 (Header /Payload /Signature)
- Header => JWT에서 사용할 타입과 해시 알고리즘의 종류가 담겨 있다.
- Payload => 서버에서 첨부한 사용자 권한 정보와 데이터가 담겨있다. 즉, 서버와 클라이언트가 주고받는 시스템에서 실제로 사용될 정보에 대한 내용을 담고 있는 섹션.
- Signature => Header와 Payload를 Base64 URL-safe Encode를 한 이후 Header에 명시된 해시함수를 적용하고 개인키(Private Key)로 서명한 전자서명이 담겨있다.
👆🏻Header Payload는 단순히 인코딩된 값이기 때문에 제 3자가 복호화 및 조작할 수 있지만 Signature는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화 할 수 없다.