본문 바로가기
Spring Security

기본 API & Filter 이해 (1)

by asdft 2024. 2. 2.

1. 인증 API - 사용자 정의 보안 기능 구현

인증 (Authentication)

사용자의 신원을 검증하는 행위 , 회원가입하고 로그인 하는 것.

 

인가(Authorization)

사용자에게 특정 리소스나 기능에 액세스할 수 있는 권한을 부여하는 프로세스

 

Spring Security에는 HttpBasic  인증 방식과 formLogin  인증방식 두 가지 인증방식이 있다.

  • HttpBasic 인증 방식 : Http 프로토콜에서 정의한 기본 인증 방식.
  • formLogin 인증 방식 : 서버에 해당 사용자의 session 상태가 유효한지를 판단해서 처리하는 인증 방식.

2. 인증 API - HttpBasic 인증


• HTTP는 자체적인 인증 관련 기능을 제공하며 HTTP 표준에 정의된 가장 단순한 인증 기법이다
• 간단한 설정과 Stateless가 장점 - Session Cookie(JSESSIONID) 사용하지 않음
• 보호자원 접근시 서버가 클라이언트에게 401 Unauthorized 응답과 함께 WWW-Authenticate header를 기술해서

  인증요구를 보냄
• Client는 ID:Password값을 Base64로 Encoding한 문자열을 Authorization Header에 추가한 뒤 Server에게 Resourc를

  요청
      • Authorization: Basic cmVzdDpyZXN0
  ID, Password가 Base64로 Encoding되어 있어 ID, Password가 외부에 쉽게 노출되는 구조이기 때문에 SSL이나 TLS는 필수이다

 

BasicAuthenticationFilter

 

3. 인증 API - FormLogin 인증

1. 사용자가 GET 방식으로 "/home" URL로 자원 접근을 시도함.

2. 인증에 실패할 경우 다시 인증을 받게끔 로그인 페이지로 리다이렉트

3. 올바른 username & password 입력 후 POST 방식으로 다시 인증 시도

4. 인증 결과를 담은 인증 토큰(객체)를 Security Context에 생성하고, 이 Security Context를 Session에 저장

5. 인증을 받은 후 "/home" URL로 접근을 시도할 경우, 세션에 저장된 인증 토큰으로 접근 및 인증 유지

 

http.formLogin( ) // Form 로그인 인증 기능이 작동함

 

protected void configure(HttpSecurity http) throws Exception {
 http.formLogin()
  .loginPage(“/login.html") 			  // 사용자 정의 로그인 페이지
  .defaultSuccessUrl("/home)			  // 로그인 성공 후 이동 페이지
  .failureUrl("/login.html?error=true“)	 // 로그인 실패 후 이동 페이지
  .usernameParameter("username")		 // 아이디 파라미터명 설정
  .passwordParameter(“password”)		 // 패스워드 파라미터명 설정
  .loginProcessingUrl(“/login")			 // 로그인 Form Action Url
  .successHandler(loginSuccessHandler())	// 로그인 성공 후 핸들러
  .failureHandler(loginFailureHandler())	// 로그인 실패 후 핸들러
}