Spring Security 란?

Spring 에서 제공하는 강력한 보안 기능이다. 특히, 커스텀이 가능한 인증(Authentication)과 인가(Authorization)의 두 가지 주요 기능을 제공한다.

 


인증 (Authentication)

사용자가 "누구"인지 확인하는 과정이다. 자신을 증명하기 위해서 자격 증명(ex. 사용자 이름이나 비밀번호)가 필요하다.

 

 

인가 (Authorization)

인증된 사용자가 특정 자원에 접근하거나 특정 작업을 수행할 수 있는 "권한"을 가지고 있는지 결정하는 것이다.

  • 경로 기반 인가 (특정 HTTP 경로)
  • 메소드 시큐리티 (Java 메소드 호출)
  • 표현식 기반 접근 제어 (보다 복잡한 규칙을 표현식으로 정의)

 

 

 

 

 

 

 

로그인 방식에는 크게 두가지로 나눌 수 있다. 바로 상태를 유지하는 인증(Stateful Authentication)상태를 유지하지 않는 인증(Stateless Authentication)이다.

 

상태를 유지하는 인증 (Stateful Authentication)

서버가 사용자의 로그인 상태를 확인할 때 쿠키나 세션을 사용하는 방식을 말한다. 사용자의 인증 상태는 서버에서 관리된다.

  • 폼 기반 로그인 방식 (Form-based Authentication, 가장 일반적)
    가장 일반적으로 사용되며, 사용자가 웹 폼(Form)을 통해 로그인 정보(아이디, 비밀번호)를 입력하는 방식이다. 서버는 이 정보를 받아 인증을 수행하고, 성공적인 인증 후에는 사용자의 세션을 생성하여 로그인 상태를 유지한다.

  • LDAP (Lightweight Directory Access Protocol, 내부 네트워크 또는 기업 환경에서 주로 쓰임)
    폼 기반 또는 다른 인증 방식을 통해 LDAP 서버에 접근하여 사용자의 자격 증명을 확인하는 방식이다.



상태를 유지하지 않는 인증 (Stateless Authentication)

상태를 유지하지 않는 인증은 서버가 사용자의 인증 상태를 세션에 저장하지 않는다. 대신, 클라이언트가 서버로 요청을 보낼 때마다 인증 정보를 포함하여 자격을 증명한다.

 

  • HTTP 기반 로그인 방식(HTTP Basic Authentication)
    HTTP 헤더사용자의 이름과 비밀번호를 Base64로 인코딩하여 전송한다. 서버는 매 요청마다 이 정보를 확인하여 인증을 수행한다. 인증정보는 저장되지 않으며, 각 요청은 독립적으로 처리된다.
  • OAuth2 (구글, Facebook API)
    외부 서비스 제공자를 통해 인증하는, 제 3자가 끼어드는 인증 방식이다. 사용자가 서비스 제공자를 통해 인증하고, 인증에 성공하면 토큰을 받는다. 이 토큰은 사용자의 요청마다 서버에 제출되어 인증을 위해 사용된다.

  • JWT (JSON Web Tokens)
    사용자가 인증하면, 서버는 JSON 형태의 웹 토큰을 생성하고 반환한다. 이 토큰은 사용자가 서버에 요청을 보낼 때마다 헤더에 포함시켜 전송한다. 토큰 자체에 사용자의 인증 정보가 포함되어 있어, 서버는 세션을 유지할 필요가 없다.

 

+ Recent posts