# Back-End/Spring

인증과 인가란?

📖 인증이란? (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

728x90