스프링 부트와 스프링 시큐리티
스프링 프레임워크를 수월하게 사용하기 위해서 스프링 부트가 개발됨
- 미리 설정된 스프링 부트의 옵션만 사용하더라도 기본적인 애플리케이션 개발이 가능하며, 필요에 따라 재정의가 가능함
- 이런 접근법을 "설정보다 관습(convention-over-configuration)" 이라고 함
- 덕분에 개발자는 비즈니스 로직을 구현하는데 훨씬 더 많은 시간을 투자할 수 있음
스프링 시큐리티 코드
https://github.com/spring-projects/spring-security
GitHub - spring-projects/spring-security: Spring Security
Spring Security. Contribute to spring-projects/spring-security development by creating an account on GitHub.
github.com
스프링 시큐리티 알아보기
- HTTP Basic 인증을 이용하여 사용자를 인증하고 권한을 부여함
- 정의된 경로(/api/v1/hello)를 Rest API 엔드포인트로 노출함
- 응답이 성공하면 HTTP 200 상태 메시지와 응답 본문을 반환함
Rest 엔드포인트 생성
- 스프링 시큐리티에 대해 공부를 시작하기 위해서는 보안을 적용하고자 하는 하나의 REST API 엔드포인트가 존재해야 함
- 엔드포인트를 생성 및 호출 시 어떤 일이 발생하는지 알아보자
실습)
디버깅 모드로 실행 후,
"Hello, Spring Security!" 가 출력됨
스프링 시큐리티 적용
만약 스프링 시큐리티를 적용하면 어떻게 될까?
1. 의존성 추가하기
2. 디버깅 실행하기
3. 8080 포트로 애플리케이션이 실행됨
4. 스프링 시큐리티가 적용된 애플리케이션의 엔드포인트를 호출하려면 이 비밀번호를 사용해야 함
- UserDetailServiceAutoConfiguration 에서 생성됨
- 스프링 시큐리티가 기본으로 설정되어 있을 때, HTTP Basic 인증 방식으로 동작함 ( 헤더로 아이디와 패스워드를 전달)
Rest 엔드포인트 호출(1) - 에러 발생
- curl을 활용하여 생성한 엔드포인트(GET /api/v1/hello) 를 호출해보자
- 401 에러 반환
- 401 에러는 권한이 없을 때 나오는 에러(Unanthorized)
- 그 이유는 스프링 시큐리티가 적용되었음에도 올바른 자격 증명이 제공되지 않았기 때문 (= 아이디와 비밀번호를 입력하지 않음)
+ 400번 에러 코드
- 보통 400번대 에러 코드는 클라이언트 에러를 의미함
- HTTP 401 Unauthorized 상태는 인증 실패를 의미함
- 애플리케이션을 서계할 때 자격 증명이 누락되거나 잘못되었을 때 401 에러 코드를 사용
- 유사한 에러 코드로는 403 Forbidden 코드가 있음
- 호출자는 누구인지 식별했지만 호출자에게 이용 권리가 없다는 의미를 뜻
Rest 엔드포인트 호출(2) - 인증
- 스프링 시큐리티는 기본 사용자 아이디로 user, 기본 비밀번호로는 터미널에 제공된 값(UUID)을 활용함
- 따라서, 401 권한 없음 에러를 해결하려면?
-> 기본 아이디인 user 와 터미널에서 봤던 비밀번호를 curl 요청에 포함시켜 주면 됨
curl -i -u user:[비밀번호] http://localhost:8080/api/v1/hello
응답으로 200 이 반환된 것을 확인할 수 있음
=> postman 툴 이용하자!
- 개발한 API를 쉽게 호출하고 테스트할 수 있도록 도와주는 플랫폼
- 알아보기 쉬운 그래픽 인터페이스 (GUI) 로 만들어져 있기 때문에 활용하기 편함
방법1)
방법2)
'공부 > Spring Security' 카테고리의 다른 글
HTTP Basic 인증 방식 (0) | 2025.01.01 |
---|---|
PasswordEncoder 와 암호처리 (0) | 2024.12.31 |
UserDetails (0) | 2024.12.31 |
Spring Security 기본 구성 (0) | 2024.12.29 |