본 포스팅은 'React.js, 스프링 부트, AWS로 배우는 웹 개발 101 - 김다정'님의 책을 보고 작성되었습니다.
목차
1. Basic 인증
2. Bearer 인증
3. JSON 웹 토큰
0. 인증과 인가
- 인증
- 당신이 누구인가에 관한 문제이다.
- 신원 확인과 관련된 사항을 생각하면 된다.
- 인가
- 당신이 사용할 수 있는 것에 관한 문제이다.
- 신원이 확인된 사람이 어디까지 사용할 수 있는지를 생각하면 된다.
1. Basic 인증
- HTTP는 무상태를 유지한다 했다. 이런 경우 로그인 상태를 유지하는 것을 빼면 무상태 유지를 하는 것이 맞다. 이 무상태 유지를 하는 가장 간단한 방법은 HTTP 요청에 아이디, 비밀번호를 같이 보내는 것이다.
- 이런 방법을 Basic 인증이라고 한다.
Basic 인증의 문제점
- Basic 인증은 HTTP 요청 헤더에 아이디 비밀번호를 인코딩해 보내기 때문에 이를 중간에 탈취해 다시 디코딩 하면 우리의 정보가 노출되는 심각한 문제가 발생하게 된다.(보안상 이슈가 발생)
- 그렇기에 위와 같은 문제를 해결하기 위해서는 https를 사용해야 한다.(https는 http에 보안 개념이 추가된 프로토콜이다.)
- 또한 Basic 인증을 사용하면 모든 요청이 로그인 요청이기 때문에 로그아웃 시킬 수 없고 여러 디바이스에 로그인 되어 있는 경우에도 한 번에 로그아웃 시킬 수 없다.
- 요청을 확인하러 매번 저장 장소를 왔다 갔다 해야하기 때문에 DB에 과부하가 걸릴 확률이 높다.
2. Bearer 인증(토큰)
- 토큰은 사용자를 구분할 수 있는 문자열로 최초 로그인 시에 서버가 토큰을 만들어주고 이를 사용하여 인증된 사용자임을 확인한다.
토큰 기반 인증 특징
- Basic 인증과 다르게 아이디와 비밀번호를 매번 네트워크를 통해 전송해야 할 필요가 없어 보안 측면에서 조금 더 안전하다.
- 서버가 토큰을 마음대로 생성할 수 있어서 사용자의 인가 정보 또는 유효 시간을 정해 관리할 수 있다.
- 디바이스마다 다른 토큰을 생성해 디바이스마다 다른 유효 시간을 정해 임의 로그아웃을 할 수 있게 했다.
토큰 기반 인증 문제점
- 스케일 문제는 여전히 해결하지 못한다.
3. JSON 웹 토큰
- 서버에서 전자 서명된 토큰을 이용하면 인증에 따른 스케일 문제를 해결할 수 있다.
- 우리는 전자 서명된 토큰을 이용해 스케일 문제를 해결한다. 이렇게 전자 서명된 토큰 중 하나가 JSON 웹 토큰이다.
- {header}.{payload}.{singature}로 JWT 토큰은 구성되어 있다.
JWT란?
- JWT에서 전자 서명이란 {헤더}.{페이로드}.{서명(시크릿 키)}와 시크릿키를 이용해 해시 함수에 돌린 함수화한 결과 값이다.
- 여기서 시크릿키는 나만 알고있는 문자열, 비밀번호 같은 것이다. (너무 간단하지만 않다면 모두 가능하다.)
- 서명된 부분만 확인하면 되기 때문에 인증 서버에 토큰의 유효성에 대해서 물어볼 필요가 없어져 스케일의 문제가 사라지게 된다.
- 인증 서버에 부하를 일으키지 않는다는 뜻이고 더 이상 인증 서버가 단일 장애점이 아니라는 뜻이다.
토큰을 훔쳐간다면?
HTTPS를 사용해 통신한다면 이런 문제는 일어나지 않지만 토큰을 도난 당했다면 해당 계정의 리소스에 접근할 수 있게 된다. 그렇기에 HTTPS를 사용해서 통신해야 한다!!!
'Back-End > React.js, 스프링 부트, AWS로 배우는 웹 개발 101' 카테고리의 다른 글
[React.js, 스프링 부트, AWS로 배우는 웹 개발 101][인증 백엔드 통합] - 스프링 시큐리티 와 서블릿 필터 (0) | 2022.06.27 |
---|---|
[React.js, 스프링 부트, AWS로 배우는 웹 개발 101][인증 백엔드 통합] - User Layer 구현 (0) | 2022.06.22 |
[React.js, 스프링 부트, AWS로 배우는 웹 개발 101] - 백엔드와 프론트엔드 연결 작업 그리고 CORS (0) | 2022.06.20 |
[React.js, 스프링 부트, AWS로 배우는 웹 개발 101][프론트엔트 개발] - 서비스 개발2 (0) | 2022.06.16 |
[React.js, 스프링 부트, AWS로 배우는 웹 개발 101][프론트엔트 개발] - 서비스 개발 (0) | 2022.06.14 |