[Basic] 인증, 인가
2022. 12. 14. 16:00ㆍWeb/네트워크
Spring에서 보안 쪽 개념을 한번 훑으면서 나왔던 키워드들을 정리해보려고 한다. 해당 부분은 웹에서도 관련이 있어서 일단은 웹 쪽으로 기록을 시작하게 되었다.
인증, 인가
- 인증 - authentication
- 식별이 가능한 정보로 서비스에 등록이 된 유저의 신원을 입증하는 과정
- 로그인
- 인가 - authorization
- 해당 유저가 특정 리소스 혹은 기능에 접근할 수 있는 권한이 있는지 확인하는 개념
- 로그인을 해야만 진행할 수 있는 기능, 이때 기능을 사용할 수 있는지에 대한 입증
웹 어플리케이션 특수성
- 웹 어플리케이션의 경우 HTTP라는 프로토콜을 사용하여 통신을 진행
- 비연결성(connectionless)과 무상태(stateless)로 이루어짐
비연결성
- 연결을 유지하지 않는 모델
- 초 단위 이하의 빠른 속도 응답
- 트래픽이 많고 큰 규모의 서비스 운영시 한계를 보임
- 서버 자원 효율적 사용
지속 연결
- 연결을 유지하는 모델
- 처음 연결을 유지하여 요청/응답을 진행하는 연결
- 응답을 기다리지 않고 연속해서 요청 가능 - 파이프라이닝
무상태 - stateless
- 서버가 클라이언트 상태 보존 X
- 장점
- 서버의 확장성 ↑ → 대량의 트래픽 발생에도 대처가 수월
- 같은 서버를 써야한다는 점이 없기에 서버에 문제가 생겨도 이상이 없음
- 단점
- 클라이언트 측에서 추가 데이터 전송
- 상황
- 로그인이 필요가 없는 단순한 서비스, 검색
상태 유지 - stateful
- 서버가 클라이언트의 상태 보존 O
- 장점
- 서버에 이전 내역들이 저장이 되기에 중간에 중단되어도 같은 위치에서 다시 시작 가능
- 단점
- 사용자가 서버를 사용하는 동안 계속 같은 서버를 연결시켜야 함. → 리소스 사용 증가
- 서버가 장애가 나면 연결의 끊김
- 상황
- 온라인 뱅킹, 로그인, 이메일
대부분의 웹사이트 연결 후 상태 유지인 Stateful은 최소한으로 사용한다. 실제로 웹의 경우 비연결성, 무상 태성만 사용하는 것이 아닌 지속 연결과 stateful까지 사용하며, 주어진 상황에 맞게 사용할 수 있도록 설계해야 한다.
인증의 방법
인증의 방법은 다음과 같다. 인증의 방법에는 몇 가지가 더 추가로 존재하지만 이는 추후에 학습하면서 작성하려고 한다.
- 세션 - 쿠키
- 토큰 ← JWT(Json Web Token) ← Access Token, Refresh Token
세션 - 쿠키
- HTTP 프로토콜의 약점을 보완하기위해 등장
- HTTP 프로토콜은 비연결 성과 무상 태성을 바탕으로 진행
- 만약 stateless인 상태에서 로그인이 필요한 작업, 즉 stateful 한 경우를 대처하기 위해 등장
세션 | 쿠키 |
특정 유저 로그인 기록을 서버에서 저장하는 방식 | 인증과 관련이 된 사용자 정보를 로컬(pc)에서 저장 |
인증과 관련이 된 최소한의 정보를 서버에 저장 | 로컬에 저장이 되는 키와 값이 들어있는 데이터 파일 |
여러명의 클라이언트를 구분하기 위해 SessionId 발급 | 주어진 SessionId를 바탕으로 서버와 연결 |
토큰 - JWT
- 인증에 필요한 정보, 즉 사용자에 대한 속성을 암호화 하여 진행이 된다.
- 토큰은 여러가지 종류가 존재하며 JWT의 경우도 토큰의 한 종류이다
- Json Web Token
- 사용자 정보 : 이름, 만료시기, 권한.. etc
- 비밀번호 같은 중요 정보는 이미 로그인을 하면서 토큰을 발급받은 것이기에 제외
- 세션 - 쿠키 같은 경우 같은 session id를 저장하여 stateful을 유지
- 이때 세션의 경우 session-id값을 저장하는 세션 저장소가 따로 존재하게 된다.
- 서버는 세션 저장소를 확인하여 값을 확인 후 이제 요청된 내용을 반환한다.
- 토큰의 경우 이러한 세션 저장소를 거치는 과정을 제거를 했다.
- 토큰을 decoding 하는 역할을 지닌 것을 Secret Key라고 한다
- JWT는 읽기만 가능(read only)한 데이터이다.
- 해당 secret key를 각 서버에 배치를 하여 각 요청에 맞게 토큰을 암호화 및 복호화를 진행한다.
- JWT도 물론 쿠키와 동일하게 유효기간이 존재
- Access / Refresh 토큰이 존재 / RefreshToken은 선택사항
- 처음 토큰이 생성이 되면 Access / Refresh Token은 사용자에게 전달
- 서버는 Refresh Token만 지니고 있음
- Access Token
- 유효기간이 존재한다. 해당 시간이 지나면 해당 토큰은 기간이 지나 사용 x
- 토큰의 기간이 지날 때마다 토큰 재발급은 개발 당시 선택사항
- Refresh Token 등장
- Access Token의 기능이 완료가 되면 추후에 요청을 보낼 때 Refresh Token과 다시 서버로 보냄
- Refresh Token을 확인하여 다시 클라이언트에 Access Token 반환
- Access Token
- 장점
- 동시 접속자가 많을 경우 서버 부하 ↓
- 세션 서버를 따로 사용하지 않기에 리소스 처리 효율 증가
- 단점
- 토큰도 결국 관리해야 하는 대상
- 구현의 복잡도 증가
- secret key 유출 시 JWT 조작 가능
- JWT에 담는 내용이 커질수록 네트워크 비용이 증가
출처
인프런
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
[10분 테코 톡] 🎡토니의 인증과 인가 - YouTube
'Web > 네트워크' 카테고리의 다른 글
[Etc] Presigned URL이란 (0) | 2023.08.28 |
---|---|
[Web 지식] IPv6 - Internet Protocol (0) | 2023.05.25 |
[REST API] REST API 설계 (0) | 2022.12.22 |
[HTTP] PUT / PATCH 차이 (0) | 2022.12.22 |
[HTTP] HTTP 상태코드 (0) | 2022.11.05 |