본문 바로가기
공부/Spring Security

Spring Security 시작

by xladmt 2024. 12. 29.

스프링 부트와 스프링 시큐리티

스프링 프레임워크를 수월하게 사용하기 위해서 스프링 부트가 개발됨

- 미리 설정된 스프링 부트의 옵션만 사용하더라도 기본적인 애플리케이션 개발이 가능하며, 필요에 따라 재정의가 가능함

- 이런 접근법을 "설정보다 관습(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 Controller 생성

디버깅 모드로 실행 후,

명령어로 호출하면

"Hello, Spring Security!" 가 출력됨

 

스프링 시큐리티 적용

만약 스프링 시큐리티를 적용하면 어떻게 될까?

1. 의존성 추가하기

2. 디버깅 실행하기

3. 8080 포트로 애플리케이션이 실행됨

4. 스프링 시큐리티가 적용된 애플리케이션의 엔드포인트를 호출하려면 이 비밀번호를 사용해야 함

- UserDetailServiceAutoConfiguration 에서 생성됨

- 스프링 시큐리티가 기본으로 설정되어 있을 때, HTTP Basic 인증 방식으로 동작함 ( 헤더로 아이디와 패스워드를 전달)

 

Rest 엔드포인트 호출(1) - 에러 발생

- curl을 활용하여 생성한 엔드포인트(GET /api/v1/hello) 를 호출해보자

- 401 에러 반환

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