Spring Security/Spring Authorization Server

[Spring Authorization Server Sample 따라 구현하기] H2 DB 설정

gigyesik 2024. 10. 1. 02:32
반응형

개요

구현한 인증 서버가 성공적으로 작동하는 것을 확인하였다.

user1 이라는 유저가 리소스 서버에 데이터를 요청해 인증 후 응답을 받는 과정이었는데, 인증을 통과한 기록을 확인하고 싶다면?

H2 DB 를 접속해본다.

동작

로그인 화면

h2 또한 인증 서버 구성 요소이고, 현재 로그아웃한 상태였으므로 로그인 화면을 다시 만나게 된다.

H2 로그인 시도

http://localhost:9000/h2-console 의 로그인 화면을 만나게 된다.

인증 서버 실행시 출력된 콘솔에 있는 DB 정보들을 입력한다.

하지만, 이렇게 진행하게 되면 Forbidden 에러를 만나게 된다.

이는 스프링 시큐리티 설정의 CSRF 기능이 동작하였기 때문이다. CSRF 에 대한 이야기는 좀 더 시간을 내서 할 수 있을 것이다.

CSRF 해제

접속하고 싶은 경로인 /h2-console 에 대해 CSRF 를 해제하고 싶다.

인증 서버의 DefaultSecurityConfig 에 다음 내용을 추가한다.

  • requestMatchers() : 경로에 대한 보안 설정을 해제한다.
  • ignoringRequestMatchers() : 경로에 대한 csrf 설정을 해제한다.
@Bean
    public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(authorize ->
                        authorize
                                .requestMatchers(
                                                                                ...
                                        new AntPathRequestMatcher("/h2-console/**")
                                )
                                .permitAll()
                )
                .csrf(csrf -> csrf.ignoringRequestMatchers(new AntPathRequestMatcher("/h2-console/**")))
                                            ...
                )

H2 로그인

다시 http://localhost:9000/h2-console 에 접속한다.

접속 url 정보는 인증 서버 실행시 발생하는 로그에서 얻을 수 있다.

정보를 입력하고 connect 한다.

프레임 옵션 해제

이번에는 아래와 같이 깨진 화면을 만날 수 있다.

이는 h2 콘솔 화면이 프레임 단위로 구성되었기 때문이며, 시큐리티 설정에서는 사이트의 컨텐츠를 다른 사이트의 일부로 사용하는 것을 방지하기 위해 프레임 단위 화면을 차단한다.

DefaultSecurityConfig 에 프레임 옵션을 해제하는 내용을 추가한다.

내용은 X-Frame-Options 라는 헤더를 포함시키는 것이다.

@Bean
    public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
        http
                ...
                                .headers(header ->
                        header
                                .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
                )
                                ...
                )

H2 접속

드디어 로그인에 성공하고 아래와 같은 화면을 만날 수 있다.

인증 데이터 확인

테이블을 클릭하면 자동으로 쿼리가 생성되고, 실행하여 인증 내역을 확인할 수 있다.

결론

인증이 성공하고 인증 내역이 DB에 기록되는 것도 살펴보았다.

In-memory DB 인 H2 는 테스트 개발용으로는 적합하지만, 서비스 개발을 한다면 여러 제한사항이 있을 수 있다.

DB를 RDBMS 인 MySql 로 교체하는 과정을 다음 포스팅에 진행하겠다.

Repository

https://github.com/gigyesik/spring-authorization-server-sample/tree/clone

반응형