[Spring] Oauth2 Security 의문점 (read properties , set expire oauth2 access token time)

유형찬·2022년 11월 25일
0

Spring Security OAuth JWT

Introduction

이번 포스팅에서는 Spring Security google Oauth2 JWT 를 하면서 의문점을 가진 부분을 정리해보려고 한다.

application.yml

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: ${GOOGLE_CLIENT_ID}
            client-secret: ${GOOGLE_CLIENT_SECRET}
            scope: openid,profile,email
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
            client-name: Google
        provider:
          google:
            issuer-uri: https://accounts.google.com
            authorization-uri: https://accounts.google.com/o/oauth2/v2/auth
            token-uri: https://www.googleapis.com/oauth2/v4/token
            user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
            user-name-attribute: sub
            jwk-set-uri: https://www.googleapis.com/oauth2/v3/certs

와 같이 설정을 해주고

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .oauth2Login()
                .and()
                .oauth2ResourceServer()
                .jwt();
    }
}

의문

  1. spring boot 는 어떻게 yaml 파일을 읽어서 bean 으로 만들어주는가?
  2. google oauth2 docs를 보면 expires_in (만료시간) 을 설정 할 수 있는데 어떻게 설정하는가?

의문점 1

참고 블로그 https://velog.io/@haerong22/Springboot-%EC%84%A4%EC%A0%95-%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C-%EA%B0%92-%EA%B0%80%EC%A0%B8%EC%98%A4%EB%8A%94-%EB%B0%A9%EB%B2%95

간단한 설명

  • spring boot는 Environment 인터페이스를 통해 설정파일을 읽어서 bean으로 만들어준다.
  • @value 어노테이션을 통해 값을 주입받을 수 있다. 이것 또한 Environment 인터페이스를 통해 값을 주입받은 값을 가져 오는 것이다.

의문점 2

Using RegisterdClient

import jdk.jfr.Registered;

import java.rmi.registry.Registry;

@Configuration
public class OAuth2Config {

    @Bean
    public RegisteredClientRepository registeredClientRepository() {
        RegisteredClient registeredClient = RegisteredClient.withId("google")
                .clientId("google-client-id")
                .clientSecret("google-client-secret")
                .clientAuthenticationMethod(ClientAuthenticationMethod.BASIC)
                .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
                .redirectUri("http://localhost:8080/login/oauth2/code/google")
                .scope("openid", "profile", "email")
                .clientSettings(clientSettings -> clientSettings.requireUserConsent(true))
                .build();

        return new InMemoryRegisteredClientRepository(registeredClient);
    }

}

위에서 설정한 값들을 통해 만들어진 bean을 등록해주면 된다.

ClientRegistration를 사용 하는게 일반적인데 뒤적 뒤적 거리다보니 인터페이스 내용에 expire 내용이 없어서

사용하기가 힘들다....

참고자료 : https://huongdanjava.com/configure-expiration-time-for-access-tokens-in-spring-authorization-server.html

profile
rocoli에요

0개의 댓글