TIL(Today I Learned)
12월 21일(목)
공부한 내용을 제 언어로 빠르게 정리한 내용이라서 잘못된 내용이 있을 수 있습니다.
서버 스터디
Authentication vs Authorization
- Authentication은 인증, Authorization은 허가(권한 부여)
- Authentication은 사용자를 식별하는 것.
- 사용자가 입력한 아이디와 비밀번호가 실제 값과 일치하는지 확인하여 회원인지 확인하는 것
- Authorization은 사용자가 리소스나 서비스에 접근할 수 있는 권한을 주는 것.
- 관리자는 서비스의 모든 정보를 볼 수 있는데 반해서 회원은 자신의 정보만 볼 수 있게 권한이 제한됨.
- Session은 Authentication은 유지하는 방법 중 하나
Authentication을 유지하는 방법
- Session-based Authenticaiton
- 사용자가 로그인하면 서버는 사용자에게 고유한 세션 ID를 부여
- 세션 ID는 브라우저 쿠키에 저장, 사용자가 요청을 보낼때마다 서버에 전송
- 서버는 세션 ID를 사용하여 사용자의 인증 상태를 유지
- Token-based Authenticaiton
- 사용자가 로그인하면 서버는 토근을 발급
- 클라이언트는 이 토큰을 저장하고, 필요할 때마다 요청 헤더에 토근을 포함시켜 서버에 전송하여 신원을 확인.
- 서버는 받은 토큰을 검증하여 유효한지 확인하고, 유효하면 해당 요청을 처리.
- 서버는 세션 상태를 유지하지 않아서 확장성에서 유리.
- 토큰이 탈취되면 무단으로 서비스를 접근할 수 있어서, 토큰 탈취에 유의해야 한다는 단점이 있음.
- OAuth 등 외부 인증 서비스 사용
- 구글이나 페이스북 등의 외부 서비스를 통해 사용자 정보를 제공 받아 인증 상태를 유지하는 방법
JSON Web Token
- 토큰 기반 인증 방법중 하나로, JSON 포맷을 기반으로 이루어진 웹 토큰
- 토큰 자체에 사용자 정보를 포함할 수 있어서 추가적인 데이터베이스 조회 없이 사용자 정보를 확인 할 수 있음
- JWT는 Header, Payload, Signiture 이렇게 세 부분으로 구성.
- 예) ‘xxxxx.yyyyy.zzzzz’
- Header에는 JWT 유형과 암호화 알고리즘 정보를 포함.
- Payload에는 Claim이라는 정보들을 담고 있음.
- Claim은 세 가지로 나뉘며 Registered claims, Public claims, Private claims가 있다.
- Signiture은 Header와 Payload를 결합하고 특정 암호화 알고리즘을 사용하여 서버에서 생성한 비밀 키로 서명
- 이 서명을 통해 토큰의 무결성을 확인. 즉, 토큰이 변경되었는지 여부를 검증