📖 인증이란? (Authentication)
보호된 리소스에 접근하는 것을 허용하기 이전에 등록된 유저의 신원을 입증하는 과정
📖 인가란? (Authorization)
요청된 리소스에 접근할 수 있는 권한이 있는 인증된 유저인지 입증하는 과정
인증된 사용자만이 인가 받을 수 있다.
인증된 사용자만이 인가받을 수 있다.
인가 받은 "인증된 사용자"만이 요청된 자료에 접근할 수 있다.
인증과 인가의 방법
- 인증하기 : Request Header
- 인증 유지하기 : 브라우저의 쿠키, Session
- 안전하게 인증하기 : Server
- 효율적으로 인증하기 : Token (Ex: JWT : Json Web Token)
- 다른 채널을 통해 인증하기 : OAuth
1. Request Header
사용자는 Request Header에 ID PW를 담아 인증한다.
2. Cookie
사용자는 매번 인증할 수 없으니 쿠키에 저장시킨다.
3. Session
- 쿠키에 저장하는 것은 보안 상 위험할 수도 있으니 서버에서 세션을 발급하고 이를 클라이언트에게 반환한다.
(이때 세션은 만료되기도 하고 비밀번호 같은 데이터를 저장하지 않는다.)
- 세션은 서버마다 발급하는데 로드밸런싱에 의해 여러 개의 서버가 존재한다면 저마다 세션을 관리한다.
(세션 스토리지를 통해 여러 서버의 세션들을 한 곳에서 관리하여 세션의 일관성 유지할 수 있다.)
- 클라이언트가 많아질수록 세션 스토리지에 용량이 방대해짐
아이디/비밀번호 라는 상태를 가지려는 Client, Server, Session Storage와 HTTP의 무상태성이 패러다임이 충돌함
JWT(Json Web Token)
1. Access Token만 사용할 때
- 서버는 Access Token을 발급하고 Access Token을 저장한다.
- 클라이언트가 요청하면 서버가 액세스 토큰을 생성하여 반환, 만료기한 30분을 가짐
2. Access Token, Refresh Token 모두 사용할 때
- 서버는 Access Token, Refresh Token을 모두 발급하고 Refresh Token만을 저장한다.
- 서버는 이 둘을 모두 클라이언트에 보내주고 클라이언트는 이를 저장한다.
- 클라이언트는 Access Token, Refresh Token를 서버에 전송한다.
서버는 Refresh토큰을 보고 맞다면 허락, Acces Token이 만료됐다면 액세스토큰을 재발급하여줌
(Refresh 토큰은 더 오랜 만료기간을 갖고 만료된 Access Token을 갱신하여 발급해줌)
토큰으로 상태관리를 하기에 따로 세션을 둘 필요가 없다.
토큰도 탈취 당할 수 있으니 관리해야 한다.
OAuth 2.0
OAuth는 하나의 방식이다.
사용자가 ID/PW를 알려주지 않아도 됨
원할 때 액세스 토큰의 권한 취소 가능
유저의 액세스 토큰만 가지고 있으면 됨
사용자의 ID/PW를 몰라도 허가 받은 API 접근 가능
인가 확인 시점
react
route 이동 시
rendering 시
요청 시
참고자료
https://www.youtube.com/watch?v=y0xMXlOAfss
https://www.youtube.com/watch?v=JZgD8aPkHSc
'# Back-End > Spring' 카테고리의 다른 글
[Test] Spring Layer별 테스트 작성 (1) | 2022.01.23 |
---|---|
[Test] Spring Boot 테스트 클래스 정의 어노테이션 (0) | 2022.01.23 |
[Test] JUnit5를 이용한 테스트 코드 작성 (0) | 2022.01.23 |
H2 console 세팅 & 접속 (0) | 2021.11.19 |
[JPA] 연관 관계를 가진 엔티티의 생성 (0) | 2021.10.14 |
[JPA] hibernate.ddl-auto 옵션 정리 (0) | 2021.10.11 |
ORM 과 SQL Mapper 비교 (0) | 2021.02.24 |