- Spring Security
Spring Security(스프링 시큐리티)는 Authentication(인증)과 Authrization(인가)기능 (혹은 권한 부여)을 가진 프레임워크 입니다. Interceptor, Filter 기잔의 보안 기능을 구현하는 것보다 스프링 시큐리티를 통해 구현하는 것을 적극적으로 권장하고 있습니다. Spring Security는 filter 기반으로 동작하기 때문에 Spring MVC와 분리되어 관리 및 동작합니다.
※ 보안관련 용어 정리
- 접근 주체(Principal) : 보호된 대상에 접근하는 유저
- 인증(Authenticate) : 현재 유저가 누구인지 확인(ex. 로그인)
- 애플리케이션의 작업을 수행할 수 있는 주체임을 증명
- 인가(Authorize) : 현재 유저가 어떤 서비스, 페이지에 접근할 수 있는 권한이 있는지 검사
- 권한 : 인증된 주체가 애플리케이션의 동작을 수행할 수 있도록 허락되 있는지를 결정
- 권한 승인이 필요한 부분으로 접근하려면 인증 과정을 통해 주체가 증명 되어야만 한다.
- 권한 부여에도 두 가지 영역이 존재하는 데 웹 요청 권한, 메소드 호출 및 도메인 인스턴스에 대한 접근 권한 부여
- Spring Security와 Spring Security OAuth2 Client
OAuth2(소셜 로그인) 로그인 구현 시 로그인 시 보안, 비밀번호 찾기, 회원정보 변경 등을 모두 구글, 페이스북, 네이버 등에 맡기면 되니 서비스 개발에 집중할 수 있습니다.
※ Spring Boot 1.5에서늬 OAuth2 연동방법이 2.0 에서는 크게 변경되었습니다. 하지만, 인터넷 자료들을 보면 설정 방법에는 크게 차이가 없는 경우를 확인 할 수 있습니다. 이는 spring-security-oauth2-autoconfigure 라이브러리 덕분이라고 합니다.
이 책에서는 Spring Boot 2 방식인 Spring Security Oauth2 Client 라이브러리를 사용해서 진행했습니다. 이유는 다음과 같습니다.
- 1.5에서 사용되던 spring-security-oauth 프로젝트는 유지 상태(maintenance mode)로 결정했으며, 더는 신규 기능은 추가하지 않고 버그 수정기능만 추가된다고 합니다. 신규 기능은 새 oauth2 라이브러리세어만 지원하겠다고 선언했습니다.
- 스프링 부트용 라이브러리(starter) 출시 되었습니다.
- 기존에 사용되던 방식은 확장 포인트가 적절하게 오픈되어 있지 않아 직접 상속하거나 오버라이딩 해야 하고 신규 라이브러리의 경우 확장 포인트를 고려해서 설계된 상태입니다.
또한, 이 책 이외에 Spring boot 2 방식의 자료를 찾고 싶을 경우 다음 두 가지만 확인하면 됩니다.
- spring-security-oauth2-autoconfigure 라이브러리를 사용했는가?
- application.properties 혹은 application.yml을 사용했는가?
Spring Boot 1.5 방식에서는 url주소를 모두 명시해야 했지만, 2.0 방식에서는 client 인증 정보만 입력하면 됩니다.
1.5 버전에서 직접 입력했던 값들은 2.0 버전으로 오면서 모두 enum으로 대체되었습니다.
구글 서비스 등록 및 소스는 책 또는 인터넷을 보고 진행하였고, 중간에 문제가 생겼던 부분만 작성하겠습니다.
- .gitignore 등록 후 커밋했을 때 커밋 파일 목록에 application-oauth.properties가 나타났을 경우
- .gitignore가 제대로 작동되지 않아서 ignore 된 파일이 자꾸 changes에 나올 때가 있습니다. 이럴 때에는 git의 캐시가 문제가 되는거라서 아래의 명력어로 캐시 내용 전부 삭제 후 다시 add All로 커밋하면 됩니다.
git rm -r --cached .
git add .
git commit -m "fixed untracked files"
출처 :
spring.io/projects/spring-security#overview
springbootdev.com/2017/08/23/spring-security-authentication-architecture/
www.bubblecode.net/en/2016/01/22/understanding-oauth2/
'스프링부트와 AWS로 구현하는 웹서비스' 카테고리의 다른 글
[스프링부트/AWS] 7장 AWS에 데이터베이스 환경을 만들어보자 (RDS) (0) | 2021.05.02 |
---|---|
[스프링부트/AWS] 6장 AWS 서버 환경을 만들어보자 AWS - EC2 (0) | 2021.04.18 |
[스프링부트/AWS] 4장 게시글 수정, 삭제 화면 만들기 3 (0) | 2021.04.04 |
[스프링부트/AWS] 4장 게시글 등록 화면 만들기 2 (0) | 2021.03.21 |
[스프링부트/AWS] 4장 머스테치로 화면구성하기 (0) | 2021.03.03 |