해당 게시물은 서적의 진행과 다른 설정, 다른 구성의 코드를 갖고 있는 경우가 있습니다. 참고 부탁드립니다.
Gradle, Java 17로 진행했습니다.
가볍게 Controller 설정
가볍게 프로젝트 설정 > 실행시
Spring Security에서 password를 보여준다.
실행에 성공했으니 localhost:8080/hello로 들어가보자.
결과 : 401 Unauthorized
Authorization을 설정하지 않아서 나타난 결과이다.
Postman에 설정해보자
Username : user가 default
Password : 위 spring-security UUID 입력
200 OK
UserDetaileService, PasswordProvider을 설정해보자
설정값으로 다시 접속
ERROR : 401 Unauthorized
기본 UserDetailSevice를 이용하면 PasswordEncoder이 자동 구성되지만 재정의하면 PassEncoder 또한 한세트로 다시 선언 해줘야한다.
200 OK
엔드포인트 권한부여 구성 재정의
책에서는 WebSecurityConfigurerAdapter을 사용했으니 현재 deprecated된 상태이다.
아래 공식 문서를 확인하자
https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
코드는 SecurityFilterChain으로 진행했다.
HttpSecurity는 SecurityFilterChain, WebSecurity는 WebSecurityCustomizer을 통해서 설정되고 있다.
AuthenticationProvicer 구현
UserDetailService, PasswordEncoder의 작업을 위임하는 AuthenticationProvicer을 구성해보자
AuthenticationProvicer은 인증 논리를 구형하고 사용자 관리, 암호 관리를 각각 UserDetailService, PasswordEncoder에 위임한다.
또한 코드를 조금만 수정하면 if,else절의 조건으로 UserDetailService, PasswordEncoder의 역할을 대체할 수 있다.
Config에 등록
WebSecurityConfigurerAdapter이 deprecated 되었기에 아래 링크를 참고하자
https://www.baeldung.com/spring-security-authentication-provider
이후 다시 접속을 실행하자
200 OK
JdbcUserDetailsManager, LdapUserDetailManager
https://www.samsungsds.com/kr/insights/ldap.html
PasswordEncoder
AuthenticationProvider : 인증 논리 구현
사용자의 암호를 검증하기 위한 PasswordEncoder 필요
알고리즘으로 encode하는 방식이 다양하다.
NoPasswordEncoder : 암호화 진행하지 않고 일반 텍스트로 유지 (real에서 사용하면 안된다)
StandardPasswordEncoder : SHA-256을 이용해서 암호를 해시, 새 구현에는 사용하면 안된다.
Pbkdf2PasswordEncoder : PBKDF2 사용
BCryptPasswordEncoder : bcrypt 상력 해싱 함수로 암호 인코딩
SCyptPasswordEncoder : scrypt 해싱 함수호 암호를 인코딩
PassEncoder의 Tip을 살펴보면 BCrypt를 추천하고 있다.
DelegatingPasswordEncoder
DelegatingPasswordEncoder 접두사로 어떤 메서드를 호출할지 결정한다.
UserDetails : 사용자 정보
UserDetailService : 세부 정보 검색하는 객체
UserDetailManager : UserDetailService보다 구체적
GrantedAuthority : 허용 범위 정의
PasswordEncoder : 인코딩된 문자열을 일반 텍스트 암호와 비교하는 방법 지정
BytesKeyGenerator StringKeyGenerator
암호키 생성기
'개발 > Spring' 카테고리의 다른 글
HttpSecurity 설정 정리 (0) | 2022.12.20 |
---|---|
Spring Boot + Spring Security + H2 DataBase 써보기 (0) | 2022.12.19 |
[Spring] consumes 사용하기 (0) | 2022.11.22 |
RequestBody, RequestPart, RequestParam, ModelAttribute (0) | 2022.11.22 |
Spring Boot로 이미지 첨부 가능 게시판 구현 (0) | 2022.11.22 |