Published on

[ Spring Sequrity ] 인증과 인가

Authors
  • avatar
    Name
    유사공대생
    Twitter

image

인증(Authentication)

보호된 리소스에 접근하는 것을 허용하기 전에 이전에 등록된 유저의 신원을 인증(validating)하는 과정

인가(Authorization)

요청된 리소스에 접근할 수 있는 권한이 있는 인증(authenticated)된 유저인지 입증(validating)하는 과정

사전지식

image

무상태성(statelessness)은 시스템이나 애플리케이션이 이전의 상태(state)를 기억하지 않고 각각의 요청을 독립적으로 처리하는 것을 의미함. 즉, 요청 간의 연결이나 의존성이 없으며, 각각의 요청은 그 자체로 완전한 정보를 포함하고 있음.

무상태성을 가지는 시스템에서는 클라이언트가 서버에 요청을 보낼 때 필요한 모든 정보를 요청에 포함시켜야 함. 서버는 해당 요청에 필요한 처리를 수행한 후 응답을 반환하고, 클라이언트는 필요한 경우 다음 요청을 위해 필요한 정보를 다시 제공해야 함. 서버는 클라이언트의 이전 요청이나 상태를 기억하지 않기 때문에 서버 측에서 상태를 유지하거나 관리할 필요가 없어짐.

무상태성은 여러 가지 이점을 제공함

  1. 확장성: 무상태성은 시스템을 수평적으로 확장할 수 있는 기반. 각각의 요청은 독립적으로 처리되므로, 여러 서버 인스턴스를 추가하여 요청 부하를 분산시킬 수 있음.

  2. 무결성: 상태를 기억하지 않는 것은 시스템이 불필요한 상태 관리 작업을 수행하지 않아도 되므로, 무결성을 유지하는 데 도움이 됨. 각각의 요청은 자체적으로 필요한 정보를 가지고 있기 때문에 서버 측에서 상태를 수정하거나 오염시키는 일이 없음.

  3. 캐시 가능성: 무상태성은 캐싱을 적극적으로 활용할 수 있는 환경을 제공함. 응답이 요청의 상태에 의존하지 않고 오로지 요청의 내용에만 의존한다면, 동일한 요청에 대한 응답은 캐시에 저장되어 재사용될 수 있음.

인증하기 - Request Header(요청 헤더)

회원의 아이디가 user, 비밀번호가 1q2w3e!라고 하자.

http://user:1q2w3e!@www.blog-full-of-desire.vercel.app/login

위 주소로 로그인 요청을 하면 브라우저가 처리해줌. 위 url을 Base64라는 인코더를 이용해서 인코딩을 한 후에 전달함.

fhegjGFjgaowefjpifjdasl로 인코딩이 되었다고 하자.

Authorization: Basic fhegjGFjgaowefjpifjdasl

그리고 위와 같은 요청 헤더에 담아서 요청해준다.

문제점

  • 로그인할 때 매번 인증해야 한다.
  • 보안 문제가 있다.

인증 유지하기 - Browser(세션, 쿠키)

세션(Session)은 웹 애플리케이션에서 사용자의 상태를 유지하기 위한 메커니즘. 웹은 기본적으로 무상태성(statelessness)을 가지기 때문에, 클라이언트와 서버 간의 연결이 해제되면 이전의 상태 정보를 서버가 기억하지 못함. 이때 세션을 사용하면 서버는 클라이언트에 고유한 세션 식별자를 할당하여 클라이언트의 상태 정보를 저장하고 유지할 수 있음.

일반적으로 세션은 다음과 같은 방식으로 동작함

  1. 세션 생성: 클라이언트가 서버에 처음 접속하면, 서버는 고유한 세션 식별자를 생성함. 이 식별자는 일반적으로 쿠키(cookie) 또는 URL 매개변수에 포함되어 클라이언트에게 전달됨.

  2. 세션 데이터 저장: 서버는 생성된 세션 식별자를 기반으로 클라이언트의 상태 정보를 저장함. 이 정보는 일반적으로 서버의 메모리, 데이터베이스, 파일 시스템 등에 저장됨. 세션 데이터는 클라이언트에 대한 고유 정보(로그인 상태, 장바구니 내용 등)를 포함할 수 있음.

  3. 세션 식별자 전송: 서버는 클라이언트에게 생성된 세션 식별자를 전달함. 일반적으로 쿠키를 사용하여 세션 식별자를 클라이언트에게 저장하고, 이후의 모든 요청에서 쿠키를 통해 세션 식별자를 서버에 전송함.

  4. 세션 데이터 사용: 클라이언트의 후속 요청에서 서버는 세션 식별자를 받아 해당 클라이언트의 세션 데이터를 검색함. 서버는 세션 데이터를 사용하여 클라이언트에 맞는 동작을 수행하고, 필요한 정보를 제공함.

  5. 세션 종료: 세션은 일정 기간 동안 유지되거나, 클라이언트가 로그아웃하거나 연결을 종료할 때까지 유지됨. 세션이 종료되면 세션 데이터는 일반적으로 삭제됨.

문제점

  • 로드밸런싱 문제

안전하게 인증하기 - Server

세션 DB 사용

효율적으로 인증하기 - Token(토큰(feat.jwt))

JWT 인증 방식

다른 채널을 통해 인증하기 - OAuth

다른 웹사이트 상의 자신들의 정보에 대해 접근 권한을 부여할 수 있는 공통적인 수단이자 개방형 표준

OAuth 인증 절차

image

Authorization Code Grant

클라이언트가 다른 사용자 대신 특정 리소스에 접근을 요청할 때 사용

1.0? 2.0?

1.0과 달리 2.0에서는 인증 절차 간소화, 용어 변경, 다양한 인증 방식을 제공의 특징을 가지고 있다.

  • 인증절차 간소화

    • 기능 단순화 및 규모 확장성 지원을 위해 사용
    • 디지털 서명 기반의 암호화
    • HTTPS의 암호화에 맡김
  • 용어 변경

  • 다양한 인증 방식 제공

    • Authorization Code Grant
    • Implicit Grant
    • Resource Owner Password Credentials Grant
    • Client Credentials Grant
    • Device Code Grant
    • Refresh Token Grant

OAuth의 장점

  • 사용자: 서비스에 ID/PW를 알려주지 않아도 됨. 원할 때 액세스 토큰의 권한 취소가 가능하다.
  • 서비스: 유저의 액세스 토큰만 가지고 있으면 됨. 사용자의 ID/PW를 몰라도 허가 받은 API 접근이 가능하다.

인증 서버, HTTPONLY, SSL/TLS1.3, Sliding session, 해킹방법

출처