쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
250x250
전체 방문자
오늘
어제
  • 분류 전체보기
    • HTML CSS
    • 잡담
    • 프로그래밍 꿀팁 사이트
    • 코딩 도서
    • [자바]
      • 디자인 패턴
      • 자바의 정석 - 3판
      • 자바
      • 자바 문법
    • git
    • [TDD]
    • 개발 서적 독후감
      • 클린 코더
      • 토비 스프링3
      • 객체지향의 사실과 오해
      • 모던 자바 인 액션
      • 엘레강트 오브젝트
    • CS
      • 운영체제
      • HTTP
    • [SQL]
      • SQL 기초
      • 혼자공부하는SQL
    • [ Spring ]
      • REST API
      • Spring Toy
      • Spring 에러
      • Spring
      • Spring 입문
      • Spring 핵심 원리
      • SpringMVC 1편
      • SpringMVC 2편
      • Spring Boot를 이용한 RESTful We..
      • Batch
    • [JPA]
      • JPA
      • JPA 에러
      • JPA 프로그래밍 - 기본편
      • 스프링 부트와 JPA 활용 1 - 웹 애플리케이..
      • 실전! 스프링 부트와 JPA 활용2 - API 개..
      • 실전! 스프링 데이터 JPA
      • 실전! Querydsl
    • 인텔리제이
    • [DB]
      • DB
      • H2
    • Gradle
    • 면접
    • [알고리즘]
      • 알고리즘
      • 자료구조
      • 자바 알고리즘 공부
    • [프로젝트]
    • 쿠릉식 객체지향 사고
    • 리눅스

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • SQL
  • 자바
  • 백준
  • 스프링
  • querydsl
  • REST API
  • Git
  • Spring
  • 함수형인터페이스
  • 알고리즘
  • GitHub
  • http
  • 자료구조
  • 깃허브
  • MVC
  • JPA
  • 재귀
  • java
  • springboot
  • 스프링부트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쿠릉쿠릉 쾅쾅

쿠릉쿠릉 쾅쾅

[ Spring ]/REST API

[Spring] Spring Security를 이용한 인증 처리

2022. 5. 11. 18:37
728x90

 

Spring Security

스프링 시큐리티는 어떤 데이터 저장소에 대해서도 가상으로 사용자 인증이 가능하다.
몇 가지 일반적인 사용자 저장 방식인 인메모리, 관계형 데이터베이스, LDAP에 기능을 제공하고, 사용자 저장에 대한 구현을 새롭게 만들어 사용할 수도 있다.

📌 build.gradle

// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security
implementation 'org.springframework.boot:spring-boot-starter-security:2.6.7'

📌 application.yml

spring:
  security:
    user:
      name: [username]
      password: [password]

 

1. 인메모리 사용자 저장소로 작업하기

인메모리 사용자 저장소가 디버깅이나 개발 테스트 목적으로만 유용하다.

WebSeurityConfigurerAdapter를 확장하여 보안 설정을 했으므로 가장 쉽게 사용자 저장소를 설정하는 방법은 AuthenticationManagerBuilder를 인자로 갖는 configure() 메서드를 오버라이딩하는 것이다.
AuthenticationManagerBuilder는 스프링 시큐리티의 인증에 대한 지원을 설정하는 몇 가지 메서드를 가지고 있다.
inMemoryAuthentication() 메서드로 활성화 및 설정이 가능하고 선택적으로 인메모리 사용자 저장소에 값을 채울 수 있다.

withUser()는 UserDetailsManagerConfigurer.UserDetailBuilder를 반환하고, 이는 사용자 암호를 설정하는 password()와 사용자에게 권한에 대한 역할을 부여해 주는 roles()를 포함한 몇 가지 사용자 설정 메서드를 제공한다.

password(), roles(), and() 뿐만 아니라 인메모리 사용자 저장소에서 사용자 상세 정보를 설정하기 위한 메서드가 몇 가지 더 있다.
UserDetailsManagerConfigurer.UserDetailBuilder에 사용가능한 모든 메서드가 정리되어 있다. 

메서드 설명
 accountExpired(boolean)  계정이 만료되었는지 아닌지를 정의
 accountLocked(boolean)  계정이 잠겨 있는지 아닌지를 정의
 and()  설정을 연결하기 위해 사용
 authorities(GrantedAuthority...)  사용자에게 부여된 권한들을 명시
 authorities(List<? extends 
                     GrantedAuthority>)
 사용자에게 부여된 권한들을 명시
 authorities(String...)  사용자에게 부여된 권한들을 명시
 credentialsExpired(boolean)  자격이 만료되었는지 아닌지를 정의
 disabled(boolean)  계정이 비활성화되었는지 아닌지를 정의
 password(String)  사용자의 암호를 명시
 roles(String...)  사용자에게 부여된 역할을 명시

authorities() 메소드의 축약으로 roles() 메소드가 사용된다
roles()의 인자로 사용된 값들에 ROLE_ 접두사를 붙여서 사용자에게 권한으로 부여해 줄 수 있다.

📌 SecurityConfig

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("이름이름").password("{noop}test1234").roles("USER").and()
                .withUser("admin").password("test1212").authorities("ROLE_USER", "ROLE_ADMIN");
    }
}

plain text를 사용하면 오류가 발생할 수 있으니 이 값을 인코딩 없이 사용할 수 있도록 {noop} 값을 부여. 어떠한 인코딩 없이 사용할 것을 의미.

 

2. 데이터베이스 테이블로 인증하기

스프링 시큐리티에서 JDBC 지원 사용자 저장소에서 인증하기 위해 jdbcAuthentication() 메서드를 사용한다.
📌 SecurityConfig 

@Configuration
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private final DataSource dataSource;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication()
                .dataSource(dataSource);
    }
}

DataSource만 설정해 주면 관계형 데이터에 접근이 가능해진다.

 

 

 


👀 참고자료

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kimnx9006&logNo=220634017538 

 

[스프링프레임워크] 스프링 시큐리티 -2.사용자 상세 서비스 선택

사용자 상세 서비스 선택 스프링 시큐리티는 지극히 유연하여 어떠한 데이터 저장소에 대해서도 가상으로 ...

blog.naver.com

 

728x90

'[ Spring ] > REST API' 카테고리의 다른 글

[Spring] REST API 규격 정하기  (0) 2022.05.15
[Spring] HAL Explorer를 이용한 Hateoas 기능 구현  (0) 2022.05.11
[Spring] Rest Api Monitoring을 위한 Actuator 설정  (0) 2022.05.11
[Spring] Rest API Documentation을 위한 Swagger 사용  (0) 2022.05.10
[Spring] API 구현을 위한 Hateoas 적용  (0) 2022.05.10
    '[ Spring ]/REST API' 카테고리의 다른 글
    • [Spring] REST API 규격 정하기
    • [Spring] HAL Explorer를 이용한 Hateoas 기능 구현
    • [Spring] Rest Api Monitoring을 위한 Actuator 설정
    • [Spring] Rest API Documentation을 위한 Swagger 사용
    쿠릉쿠릉 쾅쾅
    쿠릉쿠릉 쾅쾅
    깃허브 주소 : https://github.com/kureung

    티스토리툴바