본문 바로가기
스프링 & Jpa/📌Spring Security 강좌

인프런 시큐리티 강좌 #1 - 도입

by IMSfromSeoul 2022. 1. 19.

📌 Session

JWT가 왜 사용되는지 이해하는 것이 중요하다.

▸ 세션의 동작 원리

  • 서버에 첫 요청을 보내면, 서버는 사용자를 사용자 인증 페이지로 보낸다.
  • 사용자는 id, password를 입력하고, 서버는 검증한다.
  • 검증된 사용자면 session에 사용자를 등록하고 session id를 반환한다.
  • 사용자는 다음 요청부터는 session id만 반환하면 사이트를 이용할 수 있다.

▸ 세션 인증이 종료되는 방법

  1. 서버가 세션을 날려버리기
  2. 사용자 브라우저 종료
  3. 특정 시간이 지나면( 보통 30분이 지나면 서버에서 열린 세션 종료를 한다 )

▸ 세션의 단점

서버가 가질 수 있는 세션의 크기는 한정적이다.

그래서 세션 방식으로 서버를 구성하려면 서버를 여러 대 두어서 load balancing을 해야 한다.

그에 따른 해결 방법으로는 아래와 같이 2가지 방법이 있다.

  • 사용자가 첫번째 요청한 서버의 세션으로 해당 사용자를 보내기
  • 세션 서버를 따로 두기 ( DB )
    • 그런데, DB는 느리고 비싼 자원이다.

📌 CIA란

C = Confidential ( 기밀성 )

I = Integrity ( 무결성 ) : 변경이 되는 것을 막는 것

A = Availability ( 가용성 ) : 문서에 접근할 수 있는 지

A->B 로 문서를 전달한다고 해보자.

만약 중간에서 문서가 탈취된다면

기밀성, 무결성,  가용성이 깨진다.

 

그래서 문서를 암호화해서 전달한다.

그런데 결국에 B나라에 열쇠를 전달해야 한다.

그래서 첫번째로 열쇠 전달의 문제가 있다.

두번째는 문서가 누구로부터 왔는지를 알아야 한다.

홍군이 150명이고, 청군이 각각 100명씩이라서 홍군을 동시에 쳐야 하는 상황이 있다고 해보자.

중간에 탈취될 수 있는 여러 상황이 있다.

📌 RSA란

public key : 공개키

private key : 개인키

공개키로 잠궜다는 말은 개인키로만 열어볼 수 있다는 이야기니까 암호화를 의미한다.

개인키로 잠궜다는 말은 공개키로 열어볼 수 있따는 말이니까 전자서명을 의미한다.

https://www.youtube.com/watch?v=H6lpFRpyl14

📌 RFC 문서란

약속된 문서 방식 = 프로토콜

 

연결이 늘어날 수록 공통된 약속인 RFC 문서들이 생긴다.

해당 연결들이 늘어나서 world wide web ( www ) 가 만들어졌다.

즉, www는 RFC 문서 (약속,규약) 로 만들어져있다.

JWT는 RFC 7519번 문서에 만들어져 있는 약속이다.

📌 JWT란?

공식문서

https://jwt.io/introduction
  • JWT는 3부분으로 구성돼있다.
    • header
    • payload
    • signature
  • payload를 base64 방식으로 디코딩해보면 JSON 형식의 값이 들어있다.
    • 해당 payload에는 아래와 같은 정보들이 들어있다.
      • 이 토큰을 누가 누구에게 발급했는지, 이 토큰이 언제까지 유효한지
      • service가 사용자에게 공개하고자 하는 내용
        • username
        • service level 등
      • 이렇게 payload에 담긴 사용자 정보를 claim이라고 한다.
  • header에는 type과 algorithm(alg)이 들어간다.
    • type에는 jwt 고정이고, alg에는 3번 서명값을 만드는 알고리즘이 들어간다.
    • 알고리즘으로는 HS256 등이 사용될 수 있다. 
  • 서버에서는 1번 header, 2번 payload 값과 서버의 비밀값 이 세가지를 암호화 알고리즘에 넣고 돌리면 3번 signature 값이 나오게 된다.
  • 해당 서명값이 일치하면 인가된 사용자로 구분한다.
https://www.youtube.com/watch?v=1QiOXWEbqYQ

▸ Base64로 인코딩 이유?

base64로 인코딩하면 데이터가 길어져서 성능상의 비효율이 생길 수 있지만, 모든 binary data를 text로 다룰 수 있어서 전송에 이점이 생긴다.

base64 방식은 binary data를 ascii 코드를 이용해 text로 변환하는 방식이다.


base64
https://ifuwanna.tistory.com/72
https://blue-boy.tistory.com/227

해당 강좌의 출처
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0/dashboard

 

댓글