Search code examples
springspring-securityoauth-2.0instagramspring-oauth2

Caused by: java.lang.IllegalStateException: Provider ID must be specified for client registration 'instagram'


How to create Oauth2 registration for instagramm in spring. I try to do it, but I got error, I did oauth2 registration for Facebook and google, but instagram it is not working and I can't find any tutorials. This is my application.yaml:

 security:
    oauth2:
      client:
        registration:
          instagram:
            client-id: 6833951273265217
            client-secret: 398ec124b13c38ea175ded5badb117a2
            redirectUri: "{baseUrl}/oauth2/callback/{registrationId}"
            scope:
              - email
              - public_profile

When app start I get this error:

Caused by: java.lang.IllegalStateException: Provider ID must be specified for client registration 'instagram'
    at org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter.getBuilder(OAuth2ClientPropertiesRegistrationAdapter.java:95) ~[spring-boot-autoconfigure-2.4.4.jar:2.4.4]
    at org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter.getClientRegistration(OAuth2ClientPropertiesRegistrationAdapter.java:61) ~[spring-boot-autoconfigure-2.4.4.jar:2.4.4]
    at org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter.lambda$getClientRegistrations$0(OAuth2ClientPropertiesRegistrationAdapter.java:53) ~[spring-boot-autoconfigure-2.4.4.jar:2.4.4]
    at java.base/java.util.HashMap.forEach(HashMap.java:1336) ~[na:na]
    at org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter.getClientRegistrations(OAuth2ClientPropertiesRegistrationAdapter.java:52) ~[spring-boot-autoconfigure-2.4.4.jar:2.4.4]
    at org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientRegistrationRepositoryConfiguration.clientRegistrationRepository(OAuth2ClientRegistrationRepositoryConfiguration.java:49) ~[spring-boot-autoconfigure-2.4.4.jar:2.4.4]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.5.jar:5.3.5]
    ... 124 common frames omitted

Solution

  • Instagram is not the common OAuth2 provider that is supported by spring-security out of the box (see this).So you have to configure its configuration by yourself :

     security:
        oauth2:
          client:
            registration:
              instagram:
                client-id: 6833951273265217
                client-secret: 398ec124b13c38ea175ded5badb117a2
                redirectUri: "{baseUrl}/oauth2/callback/{registrationId}"
                scope:
                  - email
                  - public_profile
            provider:
              instagram:
                authorization-uri: https://api.instagram.com/oauth/authorize
                token-uri: https://api.instagram.com/oauth/access_token