[Spring] Spring Security, HTTP Basic

노유성·2023년 7월 31일
0
post-thumbnail

Spring Security 아키텍처

스프링 아키텍처는 위 그림으로 설명할 수 있다. 먼저 UsernamePasswordAuthenticationToken 에서 인증되지 않은 토큰을 발급받는다. 그 다음 AuthenticationManager에게 Filter는 인증 요청을 위힘한다. AutehnticationManager는 AuthenticationProvider를 이용해서 인증을 처리한다.
AuthenticationProvider는 인증을 하는 논리가 구현되어 있으며 UserDetailsService와 PasswordEncoder를 논리에 포함한다. 그 후에 인증이 되었다면 Authentication 객체가 생성되고 SecurityContext에 객체는 전달되고 유지된다.

맨 처음에 Spring 프로젝트를 만들고 의존성을 추가하면은 UserDetailsService와 PasswordEncoder가 구성된다. 사용자에 대한 세부 정보는 UserDetailsService interface의 구현체가 관리한다. 최초의 interface를 구현하지 않고 사용하면 Spring boot가 기본 구현을 제공한다.

기본 구현

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello!";
    }
}

/hello 로 get 요청을 보내면은 문자열을 출력하는 간단한 API 서버이다. 아무런 설정도 하지 않은 채로 이렇게 실행을 하면은 기본 자격 증명을 등록하는 일을 하게 된다. 아이디는 user, 비밀번호는

이다.

이 상태로 외부에서 데이터를 요청하면

아무 권한도 주어지지 않은 상태에서는 401에러가 발생한다. 우리는 boot가 기본 권한을 주었으므로

위와 같이 id, pw을 헤더에 추가해서 보내면은 200응답을 받을 수 있다. 엄밀히 말하면은 "id:pw"값을 base64로 인코딩한 값을 Authorization 헤더에 추가하는 것이다. 이렇게 자격 증명을 하는 방법을 HTTP Basic 인증이라고 한다.

profile
풀스택개발자가되고싶습니다:)

0개의 댓글