TIL

+ 18 인증 // 인가 그것이 무엇인가 + JWT기반 인증

JAVABOZA 2023. 7. 1. 06:14

* 인증 (Authentication)

:: 식별 가능한 정보(이름, 이메일)를 이용해서 서비스에 등록 유저의 신원 입증하는 과정

다시말해 서비스에 등록된 사용자에게만 서비스를 제공한다는 뜻

 

 

 

* 인가 (Authorization)

:: 유저에게 특정 리소스에 대한 접근을 "인가"

 

:: 인증만 가지고는 서비스를 운영하기에는 무리!

:: 인증을 한 사용자에게 모든 서비스를 제공하게 된다면? 

::  다른사람이 작성한 글이 다른사람에 의해서 수정되거나 삭제될 수 있다.

:: 또한 인가는 항상 앞에 인증이라는 선행 프로세스가 필요함!!!!

   (이유 : 인증하지 않은 유저의 권한을 알지 못하기 때문)

 

 

인증 인가예시

인증 의 방식

1. 쿠키 - 세션 방식 (=서버 기반 인증 시스템 = 세션 기반 인증 시스템)

 

★해당 방식의 핵심은 사용자의 정보를 세션에 저장하여 서버에서 관리하는 것

 

 

쿠키 - 세션방식은 서버가 '특정 유저가 로그인 되었다' 는 상태를 저장하는 방식

1. 클라이언트가 서버로 로그인 요청(HTTP Request)을 보낸다
2. 서버는 클라이언트가 보낸 아이디 패스워드를 확인한다.
3. 요청 정보가 유효하면 세션ID를 생성한다.
4. 클라이언트는 응답으로 받은 세션을 쿠키에 저장한다.
5. 클라이언트가 인증이 필요한 요청을 할 때 마다 header에 쿠키를 실어서 보낸다.
6. 서버는 세션저장소에서 쿠키를 확인하여 사용자를 식별한다.
7. 사용자에게 그에 맞는 데이터를 넘겨준다.

 

[ 단점 ]

  • 해커가 훔친 쿠키를 이용해 HTTP 요청을 보내면 서버에서는 올바른 사용자가 보낸 요청인지 알 수 없다.
  • (세션 하이재킹 공격)

> 세션에 유효시간을 넣어줘야 한다.

  • 서버에 세션을 저장하므로 사용자가 증가함에 따라 과부하를 줄 수 있어 확장성이 용이하지 못한다.
  • 시스템 확장이 어렵다. 

개발자 도구 쿠키저장소
쿠키저장소에 저장된 세션ID


JWT 기반 인증 

= Json Web Token (= 토큰기반 인증시스템)

 

:: 제떱티란 인증에 필요한 정보들을 암호화시킨  토큰

:: 제떱티기반 인증은 쿠키 - 세션 방식과 유사하게 JWT토큰(Access Token)을

     HTTP header에 실어 서버가 클라이언트를 식별

:: 서버 기반 인증 시스템과 달리 사용자의 인증 정보를 서버에 저장하지 않고

    클라이언트의 요청으로만 인가를 처리하므로 stateless한 구조를 가진다.

 

방식
1. 사용자가 로그인 시 올바른 사용자임을 확인하고, 클라이언트에게 JWT토큰(Access Token)을 발급
2. 클라이언트는전달받은 토큰을 저장해 두고, 인증이 필요한 요청마다 토큰을 http header에 담아 보냄
3. 서버에서는 암호화된 토큰을 복호화 해 올바른 요청인지 확인
4. 인증이 완료되고 서버는 요청에 응답

 

 

'TIL' 카테고리의 다른 글

+20 영속성 컨텍스트란? 영속성 컨텍스트의 기능  (0) 2023.07.04
+19 JPA란 무엇일까?  (0) 2023.07.03
+17 Springboot DTO, CREATED, READ  (0) 2023.06.30
+ 16 springboot IoC Container 와 Bean  (0) 2023.06.29
+15 제네릭스(Genrics)  (0) 2023.06.28