이번 포스팅에서는 Spring Security google Oauth2 JWT 를 하면서 의문점을 가진 부분을 정리해보려고 한다.
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();
}
}
간단한 설명
- spring boot는 Environment 인터페이스를 통해 설정파일을 읽어서 bean으로 만들어준다.
- @value 어노테이션을 통해 값을 주입받을 수 있다. 이것 또한 Environment 인터페이스를 통해 값을 주입받은 값을 가져 오는 것이다.
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 내용이 없어서
사용하기가 힘들다....