정의적인 부분으로는 어느정도는 알고 있으나, 좀 더 명확하게 머릿속에 새기기 위해서 정리를 해보고자 한다.
인증과 인가의 차이가 뭐예요?
인증
- 나는 누구인가?
인가
- 나의 권한은 어디까지인가?
들어가기에 앞서 (HTTP에 대하여)
- 클라이언트 서버 구조
- 무상태 프로토콜(Stateless)
- HTTP에서 서버가 클라이언트의 상태를 보존하지 않는 무상태 프로토콜이다.
간단한 예시를 들자면 이렇다.
클라가 서버에게 “저녁에 치킨먹자”고 말했고 서버가 “그래”라고 답했다.
저녁이 되어 클라는 서버에게 “먹으러 가자”고 말했고 서버는 대답했다. “뭘?”
- HTTP에서 서버가 클라이언트의 상태를 보존하지 않는 무상태 프로토콜이다.
- 비 연결성(Connectionless)
- HTTP는 기본이 연결을 유지하지 않는 모델 (HTTP 1.0 기준으로 HTTP는 연결을 유지하지 않는 모델이다.)
- HTTP 메세지 (블로그에 포함 안됨)
- 단순함, 확장 가능 (블로그에 포함 안됨)
쿠키, 세션 그리고 토큰: 상태 유지를 위해!
쿠키
브라우저에 저장
쿠키의 흐름
1) 서버에서 Set-Cookie 헤더에 key=value를 포함해 보낸다.
2) 클라이언트는 Set-Cookie 헤더 기반으로 브라우저에 저장한다.
3) 다음 요청부터는 Cookie 헤더에 key=value를 포함해 보낸다.
쿠키의 구성
- Domain: 쿠키의 대표서버
- Expiration: 만료 기간
- Host Only: 요청 도메인과 쿠키의 대표 서버가 같아야함
- Session: 브라우저가 종료될 때까지 유지
- Secure: 보안을 위함 (https에서 사용가능)
- Http Only: Client-side 스크립트에서 접근 불가
쿠키의 단점
- 보안에 취약하다
쿠키의 활용점
- 보안에 이슈가 되지않는 경우
세션
서버에 저장 (쿠키에 비해 비교적 안전하다.)
세션의 흐름
1) 클라이언트가 서버에 접속 시 세션ID를 발급받는다.
2) 클라이언트는 세션ID를 쿠키로 저장하고 가지고 있다.
3) 클라이언트는 요청할 때 세션ID와 함께 서버에 요청한다.
4) 서버는 세션ID로 저장되어 있는 클라이언트 정보를 확인한다.
세션의 단점
- 서버를 확장하는데 부담이 된다.
- 멀티 디바이스 환경에서 신경 써야할 부분이 있다.
- 유저 정보를 서버 메모리에 들고 있게 된다.
토큰
브라우저에 저장
토큰의 흐름
1) 클라이언트는 로그인을 한다.
2) 정보가 맞다면 서버는 클라이언트에게 토큰을 제공한다.
3) 다음 요청부터는 Authorization 헤더에 토큰을 포함해 요청한다.
토큰의 장점
- 서버의 메모리 부담이 적다.
- 서버를 확장하는데 부담이 적다.
- 멀티 디바이스 환경에서 사용하기 편하다.
토큰의 단점
- 강제로 만료시킬 수 없다.
참고
- https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-http-http%EB%9E%80-%ED%8A%B9%EC%A7%95-%EB%AC%B4%EC%83%81%ED%83%9C-%EB%B9%84%EC%97%B0%EA%B2%B0%EC%84%B1/
- https://www.youtube.com/watch?v=TXWUNePimAc
'WEB' 카테고리의 다른 글
웹서버 vs WAS: 쉬어가는 포스팅 (0) | 2022.09.29 |
---|---|
CORS: 리소스를 안전하게! (1) | 2022.09.28 |