티스토리 뷰

이제 OAuth2 서버 중 마지막인 리소스서버를 만들어보자

 

1. 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
implementation 'org.springframework.security:spring-security-oauth2-jose'
  • 우리는 JWT 토큰을 사용하므로 'org.springframework.security:spring-security-oauth2-jose' 의존성도 추가했다

 

2. 토큰을 발급해 준 issuer url을 설정에 추가한다(application.yml)

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: http://localhost:8084

 

3. SecurityFilter에 리소스 설정을 추가한다

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests((authorize) -> authorize
            .anyRequest().authenticated()
        )
        .oauth2ResourceServer((oauth2) -> oauth2.jwt(Customizer.withDefaults()));
    return http.build();
}

 

 

이렇게 하면 리소스 서버로 동작하기 위한 설정이 모두 끝난다

 

 

 

리소스 서버는 Authorization: Bearer 헤더에 대해서 알아서 처리해 주는데 이에 대해서 테스트해 보자

 

  • /users/me라는 GET API를 하나 만들었다.
  • 위의 설정(anyRequest().authenticate())로 인해 /users/me는 토큰이 있어야만 접근할 수 있다
  • 이를 위해서 토큰이 없이 요청했을 때와 토큰과 함께 요청했을 때를 테스트해 보자
  • 테스트 도구로는 크롬 개발자 도구와 wireshark를 사용했다

 

 

토큰 없이 요청

1. Request Header

  • Authorization 헤더를 보면 Bearer 뒤에 빈 값으로 요청했다

 

2. Response Header

  • 응답 코드는 401(Unauthorized)이다
  • 인증 방식 안내 헤더인 Www-Authenticate를 보면 Bearer Token 에러인 것을 볼 수 있다

 

토큰과 함께 요청

1. 전체 요청과 응답

 

2. /users/me Request message

  • 중간에 Authorization 헤더를 보면 Bearer 방식으로 토큰과 함께 요청을 보냈다

 

3. 요청을 받은 리소스 서버는 토큰이 유효한지 확인을 해야 하는데 이 과정이 /oauth2/jwks 요청이다

 

4. /oauth2/jwks 요청을 받은 권한서버는 JWT를 서명에 사용한 공개키를 반환한다(81번)

  • 응답으로 공개키 정보가 온 것을 볼 수 있다

 

5. 받은 공개키로 토큰 검증을 한 뒤 유효한 토큰이기 때문에 /users/me에 대해 응답 코드가 200으로 전송됐다 (85번)

 

 

 

이렇게 SpringSecurity를 사용해서 권한서버, 클라이언트서버, 리소스서버를 만들어봤다

다음엔 JWT에 우리가 원하는 정보를 넣을 수 있게 커스텀하는 방법을 알아보자


spring security 리소스 서버 공식 문서

https://docs.spring.io/spring-security/reference/servlet/oauth2/resource-server/jwt.html

 

OAuth 2.0 Resource Server JWT :: Spring Security

Most Resource Server support is collected into spring-security-oauth2-resource-server. However, the support for decoding and verifying JWTs is in spring-security-oauth2-jose, meaning that both are necessary in order to have a working resource server that s

docs.spring.io


1. SpringSecurity로 OAuth2 인증서버 만들기 - 1 (권한서버 만들기)

2. SpringSecurity로 OAuth2 인증서버 만들기 - 2 (클라이언트서버 만들기)

3. SpringSecurity로 OAuth2 인증서버 만들기 - 3 (리소스서버 만들기)

4. SpringSecurity로 OAuth2 인증서버 만들기 - 4 (JWT payload 커스텀)

5. SpringSecurity로 OAuth2 인증서버 만들기 - 5 (Frontend) End.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30