Spring Security에 도전해보자! (24.05.24)

YJ·2024년 5월 24일
post-thumbnail

블로그 작성법
목표 > 공부한 내용 > 얻었고, 앞으로 이걸 해봐야지 적기

✋ 수업 목표

  • Spring Boot Security에 대해 공부하자.

🤔 공부한 내용

Spring Security

user / password

공식문서
https://docs.spring.io/spring-security/reference/features/authentication/password-storage.html#authentication-password-storage

[Security]
1. dependency 추가
: 기본값 id = user, password = log로 비밀번호 전달 해줌

PasswordEncoder: 직접 암호화를 지정하고 싶을 경우

  1. UserDetails: 여러분들의 유저 역할 클래스를 추상화
    Member, User, ...

    UserDetails라는 객체를 생성해서 사용

    UserDetails user = User.withDefaultPasswordEncoder()
    .username("user")
    .password("password")
    .roles("user")
    .build();
    System.out.println(user.getPassword());
    // {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG

    위 코드 사용시 security User를 사용해야한다.

    아래와 같이 코드를 옮겨 갔다.

    실행하면
    앞에다가 암호화한 것을 정해준다.

[Spring Security]

  • 인증: 1층 출입문
  • 인가: 관계자외 출입금지, 서버실

dependency를 넣으면,,
1. id가 생김
기본값 id = user, password = log로 비밀번호 전달 해줌

  1. UserDetails, UserDetailsService
  • UserDetails : 여러분들의 유저 역할 클래스를 추상화
    Member, User, ...
    1) 계정 아이디(username), 비밀번호(password), 역할(role)
    2) 만료 계정 아님? ...

    이거를 우리 클래스에 implements

  • UserDetailsService : 추상화
    Q. 이 추상화 클래스의 역할?
    loadUserByUsername() 메소드의 역할? + 언제 호출?

loaduserbyusername

  • authorization vs authentication
    의미차이
@Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception{
        httpSecurity.authorizeHttpRequests()    // 요청에 대한 권한을 지정
                .antMatchers("/join")
                .permitAll()
                .anyRequest()
                .authenticated(); // 인증은 되어야해!

        return httpSecurity.build();
    }

위 코드에서 405 에러가 발생하는 이유

API가 프론트엔드랑 소통을 할 때

csrf(cross site request forgery)

프론트엔드에서 사용자가 클릭을 하면서 발생
사용자 클릭 : URL, 버튼

한동안 피싱 사례 중에 거의 80%를 차지하였다.
이 방식을 통해 ddos 공격을 한다.

Spring Security에 csrf가 적용되어있다.
그래서, csrf를 안쓸것이다 라고 명시해줘야 한다.

인증, 인가 등 모두 Filter에서 사용하는 개념이다.

알쓸송잡
프로젝트에 적용하면 좋은 것
OAuth2
ex> kakao login

😉 앞으로 이걸 해봐야지

오늘 배운 Spring Security를 통해 Spring Boot에서 인증, 인가에 관한 기능을 제공해주는 것을 배웠다. 개념이 조금은 어려운 감이 있었지만 다시 스스로 코드를 짜보고 개념을 정리해보는 시간을 가져야겠다.

profile
dev

0개의 댓글