Spring

Spring security authorizationGrantType cannot be null 해결 방법

개발섭 2020. 10. 13. 22:41

Spring boot에서 Oauth 설정 값을 처리할때

스프링 부트에서 application.properties나 yaml를 통해서 쉽게 Oauth에 관련된 여러가지 설정들을 적용할 수 있다. 물론 버젼별로 Oauth를 적용하는 방식이 좀 다르긴 하다.

 

security:
    oauth2:
      client:
        registration:
          microsoft:
            client-id: -
            client-secret: -
            redirect-uri-template: '{baseUrl}/login/oauth2/code/{registrationId}'

 

Spring Boot 1.5 버젼에서는 이런식이다.

하지만, 2.0 버젼으로 넘어오면서 여러가지 포멧이 많이 줄었는데

 

 security:
    oauth2:
      client:
        registration:
          google:
            client-id: -
            client-secret: -
            scope: email, profile
          kakao:
            client-id: d-
            client-secret: -
            redirectUri: '{baseUrl}/login/oauth2/code/{registrationId}'
            authorization-grant-type: authorization_code
            scope: profile,account_email
            client-name: kakao
            clientAuthenticationMethod: post
        provider:
          kakao:
            authorization-uri: https://kauth.kakao.com/oauth/authorize
            token-uri: https://kauth.kakao.com/oauth/token
            user-info-uri: https://kapi.kakao.com/v2/user/me
            user-name-attribute: id

 

다음과 같이 버젼이 변화함에 따라서, 설정에서도 약간의 변경 사항이 적용되어있는데, 소셜로그인을 전달해주는 redirectUri를 지정하는 주소 포멧을 만들때 그 설정 key값이 변경되었다.

1.5버젼에서는 redirect-uri-templateredirectUri 로 다음과 같이 변화하였다.

 

근데 변화한 방식을 그대로 적용해도 되는줄 알았으나...

 

사실 이게 큰 문제를 발생시키는 것 같다고 생각은 안했지만, 실제로 2.2버젼에서 이렇게 redirect-uri-template로 사용하게 되면 다음과 같은 에러가 발생한다

 

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientRegistrationRepository' 
defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2ClientRegistrationRepositoryConfiguration.class]: 
Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: 
Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]: 
Factory method 'clientRegistrationRepository' threw exception; 
nested exception is java.lang.IllegalArgumentException: authorizationGrantType cannot be null

 

보아하니 이게 버젼업에 의해서 생긴 오류였던것을 확인할 수 있었다.

 

즉, Spring boot 2.2 버젼내에서는 redirect-uri-template를 사용할 수 없다. redirectUri로 바꿔서 사용하자. 아마 2.X 버젼이라면 될 것으로 추측된다.

 

Oauth Redirect uri 설정시 꼭 주의하자!

 

참고:

https://stackoverflow.com/questions/49315552/authorizationgranttype-cannot-be-null-in-spring-security-5-oauth-client-and-spri

 

authorizationGrantType cannot be null in Spring Security 5 OAuth Client and Spring Boot 2.0

I followed the Spring Security 5.0 official reference documentation and sample codes oauth2login to setup OAuth2/OIDC authentication in my project, but it failed and I got the following exception w...

stackoverflow.com