일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- java알고리즘
- javaJRE
- 작은수제거하기
- java map 저장
- java list 출력
- 인터프린터언어
- 항해15기
- 비전공자sqld
- javaJVM
- 격파르타후기
- java참조자료형
- 프로그래머스
- 코딩부트캠프후기
- sqld자격증합격
- 프로그래머스제일작은수
- 컴파일
- java최솟값구하기
- java set 출력
- java map 출력
- 격파르타합격후기
- 항해99후기
- java기본자료형
- 격파르타비전공자
- java list 저장
- java 자료구조 활용
- 노베이스부트캠프
- java알고리즘문제풀이
- 격파르타장점
- java map
- java set 저장
- Today
- Total
코딩과 결혼합니다
230808 - JWT널 알고 싶어(+ 인증과 인가, 인증 방식, 쿠키와 세션) 본문
인증과 인가
✔️인증(Authentication)
인증은 해당 유저가 실제 유저인지 인증하는 개념
지문인식, 로그인 등
✔️인가(Authorization)
인증 이후의 프로세스로 인증된 사용자가 어떠한 자원에 접근할 수 있는지를 확인하는 절차
권한부여 - 회원/비회원, 관리자 등
✔️웹 애플리케이션 인증의 특수성
- 비연결성(Connectionless) : 서버와 클라이언트가 연결되어 있지 않다. 서버는 실제로 하나의 요청에 하나의 응답을 하게 되면 연결을 끊어버린다.
- 무상태(Stateless) : 비연결적인 특성으로 연결이 해제됨과 동시에 서버는 클라이언트가 직전에, 혹은 그전에 어떠한 요청을 보냈는지 관심도 없고 전혀 알지 못하게 된다. 서버가 클라이언트의 상태를 저장하지 않는다는 것이다.
인증의 방식
- 쿠키- 세션 방식의 인증
쿠키 -세션 방식은 서버가 '특정 유저가 로그인되었다'는 상태를 저장하는 방식으로 인증과 관련된 아주 약간의 정보만 저장해서 로그인을 유지시킨다.
1. 사용자 로그인 요청
2. 서버는 DB의 유저 테이블을 뒤져 아이디와 비밀번호등 대조
3. 정보가 일치하면 인증을 통과한 것으로 보고 세션저장소에 해당 유저가 로그인되었다는 정보를 넣음
4. 세션 저장소에서 유저의 정보과 관련 없는 난수인 session-id 발급
5. 로그인 응답으로 session-id를 준다.
6. 클라이언트는 session-id를 쿠키라는 저장소에 보관하고 앞으로의 요청마다 이를 함께 보낸다.
7. 클라이언트의 요청에서 쿠키를 발견했다면 서버는 세션 저장소에서 쿠키를 검증
8. 유저 정보 획득 - 유저정보를 받아왔다면 로그인이 되어있는 사용자일 것
9. 로그인된 유저에 따른 응답을 줌
- JWT 기반 인증
JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다. JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다.
1. 사용자 로그인 요청
2. 서버는 DB의 유저 테이블을 뒤져 아이디와 비밀번호등 대조
3. 정보가 일치하면 인증을 통과한 것으로 보고 세션저장소에 해당 유저가 로그인되었다는 정보를 넣음
4. 서버는 로그인 요청의 응답으로 jwt토큰을 내어줌
5. 클라이언트는 그 토큰을 저장소에 보관하고 앞으로의 요청마다 토큰을 같이 보낸다.
6. 클라이언트의 요청에서 토큰을 발견하면 서버는 토큰을 검증
7. 로그인된 유저에 따른 응답을 줌
쿠키와 세션
쿠키와 세션은 모두 HTTP에 상태 정보를 유지(Stateful) 하기 위해 사용된다. 즉, 쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 된다.
JWT
JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Web Token. 토큰의 한 종류이다.
일반적으로 쿠키 저장소를 사용하여 JWT를 저장한다.
🔑JWT토큰 구성
JWT는 세 파트로 나누어진다. 순서대로 헤더, 페이로드, 서명으로 구성한다. Base64 인코딩의 경우 "+", "/", "="이 포함되지만 JWT는 URI에서 파라미터로 사용할 수 있도록 URL-Safe한 Base64url 인코딩을 사용한다.
- 헤더는 토큰의 타입(JWT)과 해시 암호화 알고리즘으로 구성되어 있다.
- 페이로드는 토큰에 담을 클레임 정보를 포함하고 있다. 페이로드에 담는 정보의 한 조각을 클레임이라고 부르고, 이는 name/value 의 한쌍으로 이루어져있다. 토큰에는 여러개의 클레임들을 넣을 수 있다.
- 시그니처는 secret key를 포함하여 암호화 되어있다.
인코딩이란?
어떠한 정보/데이터 형태나 형식을 다른 형태나 형식으로 변환하는 것. 데이터의 표준화, 처리 속도 향상, 저장 공간 절약, 보안등의 이유에서 쓴다.
Base64 인코딩이란?
Binary data(이진 데이터)를 ASCII 문자로만 이루어진 Text로 변환시키는 인코딩이다.
64진법의 의미를 가지고 있는데 2의 6제곱 64로 ASCII 문자들로 표시할 수 있는 가장 큰 진법이다. 데이터 교환에 많이 쓰인다.
Base64url
URL에는 Path를 구분짓는 /와 Space를 의미하는 +문자가 있다. Base64에는 이 문자들은 각각 62, 63번째에 사용하고 있는데, 그렇기 때문에 base64인코딩 기법을 URL에 그대로 사용했다가는 문제가 생긴다. 그래서 나온 것이 base64 url-safe 인코딩 방식이다. 62,63 번째가 - 와 _ 가 되었다.
🔑JWT 장점
- 데이터의 위변조를 방지
- 인증에 필요한 모든 정보를 담고 있기 때문에 인증을 위한 별도의 저장소가 없어도 된다.
- 세션과 다르게 서버는 무상태가 된다.
- 확장성이 우수
- 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능(쿠키와의 차이점)\
- Oauth의 경우 소셜 계정을 통해서 다른 웹서비스에 로그인할 수 있다.
- 모바일에서도 잘 동작한다.(세션은 모바일에서 동작하지 못함)
🔑JWT 단점
- 토큰의 길이가 길어 인증 요청이 많아질수록 네트워크 부하가 심해진다.
- Payload 자체는 암호화가 되지 않아 중요한 정보는 담을 수 없다.
- 토큰을 탈취당하면 대처가 매우 어렵다.
'2세 > 기타' 카테고리의 다른 글
230626 - 웹 서버의 동작 원리 (0) | 2023.06.26 |
---|---|
(WIL) 230626 - HTTP, MVC 패턴 (0) | 2023.06.26 |
230621 - 프로그래머스 제일 작은 수 제거하기/ 오류와 해결과정 (0) | 2023.06.21 |
230620 - 알고리즘 문제를 풀며 (0) | 2023.06.20 |
230616 - 프로그래머스 알고리즘 문제 풀기 (1) | 2023.06.16 |