[Spring Security] 스프링 시큐리티 6.1버전(람다식 버전) V0. 스프링 시큐리티란 무엇인가? 인증 인가는 무엇인가?

2024. 2. 5. 14:29·SPRING
반응형

Spring Security에 대해 정리하려고 합니다. 

저는 크게 4가지의 버전으로 나눠서 진행하려고 합니다.

V1. 세션 인증 방식 
V2. 토큰(JWT) 인증 방식
V3. oauth2 세션 인증 방식
V4. oauth2 토큰(JWT)인증 방식

일단 들어가기 전에 스프링 시큐리티는 무엇인지 알아겠죠?


🔥 스프링 시큐리티란? 

스프링 시큐리티는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크입니다. 

우리는 이 프레임워크만 잘 사용한다면, 내부 로직을 통하여 인증, 권한 확인에 필요한 기능과 옵션들을 제공합니다.

 

인증(Authentication), 인가(Authorization)

인증과 인가는 무엇일까요?

  • 인증 : 해당 사용자가 본인이 맞는지를 확인하는 절차.
  • 인가 : 인증된 사용자가 요청된 자원에 접근가능한가를 결정하는 절차

성인 남자들은 갔다왔을 군대에 예를 들어 설명해보도록 하겠습니다. (만약, 없다면 군필 남자🧑‍🏭분들에게 물어보면 신나서 대답해 줄 것입니다... 군필들은 군대얘기하는 것을 매우 좋아하기 때문이죠 ㅎㅎ)

초소 근무를 할 때 신원 미상자가 있으면 암구호를 말해야 합니다.(문어 : 화랑 / 답어 : 담배)

🧑‍🏭 : 정지!정지!정지! 손들어 움직이면 쏜다. 화랑

❓: 아 답어 몰라(인증 실패) -> 이러면 인증을 실패한 것이 됩니다.

 

🧑‍🏭 : 정지!정지!정지! 손들어 움직이면 쏜다. 화랑

❓: 담배 (인증 성공) -> 이러면 인증을 성공 것이 됩니다.

🧑‍🏭: 누구냐, 용무는?

❓: 북한군, 이 초소 침투하러 왔다.(인가 실패) -> 북한군이 우리나라 초소에 들어오면 안되니까 인가실패로 돌려보냅니다.

 

🧑‍🏭 : 정지!정지!정지! 손들어 움직이면 쏜다. 화랑

❓: 담배 (인증 성공) -> 이러면 인증을 성공 것이 됩니다.

🧑‍🏭: 누구냐, 용무는?

❓: 대대장, 막사에 두고 온게 있다.(인가 성공) -> 대대장은 우리나라 초소에 들어와도 되니까 인가 성공으로 들어올 수 있습니다.

 

이런식으로 간단하게 예를 들긴하였는데 결국 인증을 먼저한 후 인가를 그 다음에 한다라고 알고 계시면 될 것 같습니다.

이제 저희는 그것을 코드로 구현해보도록 하겠습니다.


🔥 세션 VS 토큰

세션인증 방식은 무엇이고 토큰 인증방식은 무엇 인가요?

일단 이 인증방식이 들어가기 전에 가장 만들기 쉬운 보안부터 생각해봅시다.

아이디와 비밀번호를 DB에다가 저장해놓고 그 아이디와 비밀번호가 같다면 통과시켜주면은 아주 간단한 보안이 만들어지죠. 근데 이걸 보안이라고 볼 수 있을까요? 
당연히 아니겠죠. 왜냐하면 DB를 탈취 하면 아이디와 비밀번호를 모두 뚫릴테니까 말이죠 그래서 나온게 세션인증과 토큰 인증입니다.

🔐세션인증  

  1. 유저가 인증정보를 담아 서버에 로그인 요청
  2. 서버는 DB에 저장된 유저의 인증정보 확인
  3. 인증에 성공 -> 유저에 대한 세션을 생성(티켓을 생성) 후 DB에 저장 (인증)
  4. 쿠키를 통해 세션 id를 클라이언트에 전달
  5. 클라이언트는 세션 id를 통해 서버에 리소스를 요청할 수 있음.
  6. 서버에 리소스를 요청할 때 마다 세션id가 함께 전달
  7. 서버는 전달받은 id를 통해 유저의 세션 데이터를 조회
  8. 세션이 유효하다면, 응답 데이터 전송 (인가)

단점 : 서버가 유저의 상태를 관리함, 서버의 부담이 커짐

 

🔐토큰인증 : 

  1. 유저의 인증정보를 담아 서버에 로그인요청
  2. 서버는 DB에 저장된 유저의 인증정보를 확인
  3. 인증에 성공 -> 유저에 대한 권한정보를 서버의 비밀키와 함께 토큰을 생성 (인증)
  4. 서버는 Authoriztion헤더에 토큰을 담아 클라이언트에 전달
  5. 클라이언트는 이 토큰을 브라우저의 세션스토리지 or 로컬스토리지 or 쿠키에 저장
  6. 클라이언트가 서버로 리소스 요청할 때, Authorization 헤더를 통해 토큰이 함께 전달 됨
  7. 서버는 전달받은 토큰을 서버의 비밀키로 검증 (토큰 위조 or 유효기간 확인)
  8. 토큰이 유효하다면, 유저의 요청에 대한 응답 데이터를 전송

서버가 아닌 클라이언트에서 유저의 인증정보를 관리하기 때문에 부담이 줄겠죠?

반응형

'SPRING' 카테고리의 다른 글

[SPRING] 1-2. Controller에서 파라미터 값 받아오기 (@RequestParam & @Pathvairable)  (1) 2023.11.26
[SPRING] 1. Controller로 api주소 다뤄보기  (0) 2023.11.21
[SPRING] spring.initializr 로 project 만들어보기  (0) 2023.11.16
'SPRING' 카테고리의 다른 글
  • [SPRING] 1-2. Controller에서 파라미터 값 받아오기 (@RequestParam & @Pathvairable)
  • [SPRING] 1. Controller로 api주소 다뤄보기
  • [SPRING] spring.initializr 로 project 만들어보기
김RPG
김RPG
  • 김RPG
    김RPG
    김RPG
  • 전체
    오늘
    어제
    • 분류 전체보기 (40) N
      • 알고리즘 (20)
      • AWS (2)
      • SPRING (4)
      • IT ISSUE (7) N
      • Git (1)
      • 개인용 (3)
      • Database (2)
  • 인기 글

  • 최근 글

  • 블로그 메뉴

    • 홈
    • 관리
  • hELLO· Designed By정상우.v4.10.3
김RPG
[Spring Security] 스프링 시큐리티 6.1버전(람다식 버전) V0. 스프링 시큐리티란 무엇인가? 인증 인가는 무엇인가?
상단으로

티스토리툴바