OAuth 2.0 Client - ClientRegistrationRepository

  • ClientRegistrationRepository ๋Š” OAuth 2.0, Open Id Connect 1.0์˜ ClientRegistration ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•œ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ๋“ฑ๋ก ์ •๋ณด๋Š” ๊ถ๊ทน์ ์œผ๋กœ ์ธ๊ฐ€ ์„œ๋ฒ„๊ฐ€ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ์ธ๊ฐ€ ์„œ๋ฒ„์— ์ผ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋œ ํด๋ผ์ด์–ธํŠธ ๋“ฑ๋ก ์ •๋ณด์˜ ์ผ๋ถ€๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • ์Šคํ”„๋ง ๋ถ€ํŠธ ์ž๋™ ์„ค์ •์œผ๋กœ spring.security.oauth2.client.registration.[registrationId] ํ•˜์œ„ ์ •๋ณด๋ฅผ ClientRegistration ์ธ์Šคํ„ด์Šค์— ๋ฐ”์ธ๋”ฉํ•˜๋ฉฐ, ๊ฐ ClientRegistration ๊ฐ์ฒด๋ฅผ ClientRegistrationRepository ์•ˆ์— ๊ตฌ์„ฑํ•œ๋‹ค.

  • ClientRegistrationRepository์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์ฒด๋Š” InMemoryClientRegistrationRepository ์ด๋‹ค.

  • ์ž๋™ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด ClientRegistrationRepository๋„ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜๋ฏ€๋กœ ์›ํ•˜๋Š” ๊ณณ์— ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

ClientRegistration / ClientRegistrationRepository ์ˆ˜๋™ ๋นˆ ๋“ฑ๋ก ์˜ˆ์ œ

@Configuration
public class OAuth2ClientConfig {

    @Bean
    public ClientRegistrationRepository clientRegistrationRepository() {
        return new InMemoryClientRegistrationRepository(keyCloakClientRegistration());
    }
    
    private ClientRegistration keyCloakClientRegistration() {
        return ClientRegistrations.fromIssuerLocation("http://localhost:8080/realms/oauth2")
                                  .registrationId("keycloak")
                                  .clientId("oauth2-client-app")
                                  .clientSecret("ANwKmYvCcxiQbjsi4jh1JHqUWikngjec")
                                  .redirectUri("http://localhost:8081/login/oauth2/code/keycloak")
                                  .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
                                  .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
                                  .scope("openid", "profile", "email")
                                  .build();
    }
}

ClientRegistrationRepository ์‚ฌ์šฉ ์˜ˆ์ œ

@RestController
@RequiredArgsConstructor
public class TestController {

    //DI
    private final ClientRegistrationRepository clientRegistrationRepository;
    
    @GetMapping("/")
    public ClientRegistration test() {
        ClientRegistration clientRegistration = clientRegistrationRepository.findByRegistrationId("keycloak");
        
        String clientId = clientRegistration.getClientId();
        System.out.println("clientId = " + clientId);
        
        String registrationId = clientRegistration.getRegistrationId();
        System.out.println("registrationId = " + registrationId);
        
        String redirectUri = clientRegistration.getRedirectUri();
        System.out.println("redirectUri = " + redirectUri);
        return clientRegistration;
    }
}
img_20.png

์ด์ „ โ†ฉ๏ธ - OAuth 2.0 Client - ClientRegistration

๋ฉ”์ธ โซ

๋‹ค์Œ โ†ช๏ธ - OAuth 2.0 Client - ์ž๋™ ์„ค์ •์— ์˜ํ•œ ์ดˆ๊ธฐํ™” ๊ณผ์ •

Last updated