본문 바로가기
개발/Spring

Spring Security인 액션[ING]

by 설이주인 2022. 12. 14.

해당 게시물은 서적의 진행과 다른 설정, 다른 구성의 코드를 갖고 있는 경우가 있습니다. 참고 부탁드립니다.

 

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

 

Spring Security without the WebSecurityConfigurerAdapter

<p>In Spring Security 5.7.0-M2 we <a href="https://github.com/spring-projects/spring-security/issues/10822">deprecated</a> the <code>WebSecurityConfigurerAdapter</code>, as we encourage users to move towards a component-based security configuration.</p> <p

spring.io

 

 

코드는 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://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/provisioning/JdbcUserDetailsManager.html

 

JdbcUserDetailsManager (spring-security-docs 6.0.0 API)

Jdbc user management service, based on the same table structure as its parent class, JdbcDaoImpl. Provides CRUD operations for both users and groups. Note that if the enableAuthorities property is set to false, calls to createUser, updateUser and deleteUse

docs.spring.io

https://github.com/spring-projects/spring-security/blob/main/core/src/main/java/org/springframework/security/provisioning/JdbcUserDetailsManager.java

 

GitHub - spring-projects/spring-security: Spring Security

Spring Security. Contribute to spring-projects/spring-security development by creating an account on GitHub.

github.com

https://www.samsungsds.com/kr/insights/ldap.html

 

알아두면 쓸데있는 LDAP

알아두면 쓸데있는 LDAP

www.samsungsds.com

 

 


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

암호키 생성기