인프런 커뮤니티 질문&답변

kim미소 파파님의 프로필 이미지

작성한 질문수

스프링 시큐리티 OAuth2

OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개(2)

OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개 issuer-uri에러

24.06.12 00:54 작성

·

241

0

섹션 7

OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개(2)
진행시

설정시 에러가 납니다

uli 클릭하면

  • realm: "oauth2",

  • public_key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqFd5+xNaJoQzccdweHH4hxMOOirdHcbGx7tAkl7YWFAD0kBpVmpFN3sWaz3T3CLa0zSULmEWuepEkf/T376JKs+opBRb8pfnDSvvq1va4UXhw5j1mMgN8a6kME2TfM4cd2XnnT9huTIJ2+4nTYPTwKhYd+KvgB1ruzUe4ApMw0injfbsyufS17bhGtHYn4Ysq7THWsOAPVQ+FMYd8e1T4tfY1jkQg68UYB43dHST34y0JWkStPowP80qLMbsPvJ4JrOCzSGk08sBvmd6Fo1KD9RAqZyGvQFXEyo1Y5jVcKGCgwin0ijQBCKhRpHmWGlmyamrW6fsgAnAJH+clUdAwQIDAQAB",

  • token-service: "http://localhost:8080/realms/oauth2/protocol/openid-connect",

  • account-service: "http://localhost:8080/realms/oauth2/account",

  • tokens-not-before: 0

}
이렇게 잘나옵니다.

 

  implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
spring:
  application:
    name: inf_oauth2
  security:
    oauth2:
      client:
        registration:
          keycloak:
            authorization-grant-type: authorization_code
            client-id: oauth2-client-app
            client-name: oauth2-client-app
            client-secret: 90GVrQtfYCp1u9cc0VAJNFiY8ZzCyjHD
            redirect-uri: http://localhost:8081/login/oauth2/code/keycloak
            client-authentication-method: client_secret_basic
            scope: openid, profile, email

        provider:
          keycloak:
            issuer-uri: http://localhost:8080/realms/oauth2
            authorization-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/auth
            jwk-set-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/certs
            token-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/token
            user-info-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/userinfo
            user-name-attribute: preferred_username

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'indexContoller': Unsatisfied dependency expressed through field 'clientRegistrationRepository': Error creating bean with name 'clientRegistrationRepository' defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2ClientRegistrationRepositoryConfiguration.class]: Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]: Factory method 'clientRegistrationRepository' threw exception with message: Unable to resolve Configuration with the provided Issuer of "http://localhost:8080/realms/oauth2"
  at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessorAutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:787) ~[spring-beans-6.1.6.jar:6.1.6]
  at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessorAutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:767) ~[spring-beans-6.1.6.jar:6.1.6]


Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientRegistrationRepository' defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2ClientRegistrationRepositoryConfiguration.class]: Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]: Factory method 'clientRegistrationRepository' threw exception with message: Unable to resolve Configuration with the provided Issuer of "http://localhost:8080/realms/oauth2"
 
  
  at java.base/java.util.HashMap.forEach(HashMap.java:1421) ~[na:na]
  at org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesMapper.asClientRegistrations(OAuth2ClientPropertiesMapper.java:64) ~[spring-boot-autoconfigure-3.2.5.jar:3.2.5]
  at org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientRegistrationRepositoryConfiguration.clientRegistrationRepository(OAuth2ClientRegistrationRepositoryConfiguration.java:49) ~[spring-boot-autoconfigure-3.2.5.jar:3.2.5]
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[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:568) ~[na:na]
  at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140) ~[spring-beans-6.1.6.jar:6.1.6]
  ... 34 common frames omitted

 

답변 3

0

kim미소 파파님의 프로필 이미지

2024. 06. 17. 23:13

uri 를 클릭 하면
{

  • realm: "oauth2",

  • public_key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqFd5+xNaJoQzccdweHH4hxMOOirdHcbGx7tAkl7YWFAD0kBpVmpFN3sWaz3T3CLa0zSULmEWuepEkf/T376JKs+opBRb8pfnDSvvq1va4UXhw5j1mMgN8a6kME2TfM4cd2XnnT9huTIJ2+4nTYPTwKhYd+KvgB1ruzUe4ApMw0injfbsyufS17bhGtHYn4Ysq7THWsOAPVQ+FMYd8e1T4tfY1jkQg68UYB43dHST34y0JWkStPowP80qLMbsPvJ4JrOCzSGk08sBvmd6Fo1KD9RAqZyGvQFXEyo1Y5jVcKGCgwin0ijQBCKhRpHmWGlmyamrW6fsgAnAJH+clUdAwQIDAQAB",

  • token-service: "http://localhost:8080/realms/oauth2/protocol/openid-connect",

  • account-service: "http://localhost:8080/realms/oauth2/account",

  • tokens-not-before: 0

}

 

이렇게 잘 나오고 있습니다.
서버 설정을 처음부터 다시 해야 할까요?

0

정수원님의 프로필 이미지
정수원
지식공유자

2024. 06. 12. 19:54

아래 답변처럼

http://localhost:8080/realms/oauth2

에서 Issuer url 관련해서 어떤 통신이 이루어지지 않는 것 같습니다.

issuer-uri: http://localhost:8080/realms/oauth2 가 정확한지 확인해 보시고 전반적으로

keycloak 서버상태를 확인해 보셔야 할 것 같습니다.

서버가 기동되면서 인가서버로부터 필요한 메타 정보를 가져오는데 연결이 안되거나 연결 중 에러가 나면 위와 같은 오류가 발생합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 06. 12. 00:56

안녕하세요, 인프런 AI 인턴입니다.

김미소 파파님의 질문에 대하여, issuer-uri 관련 에러 문제는 여러 원인으로 인해 발생할 수 있습니다. 특히, 스프링 시큐리티 OAuth2 설정 중 issuer-uri의 값을 잘못 설정하거나, 해당 URI가 올바르게 응답하지 않을 때 발생하는 것이 일반적입니다.

에러 메시지를 기반으로 판단했을 때, 스프링 부트가 issuer-uri에 제공된 주소 (http://localhost:8080/realms/oauth2) 에서 올바른 OIDC 설정 정보를 가져오지 못하는 상황으로 보입니다. 이는 해당 주소에 문제가 있거나, 아직 인증 서버가 올바르게 설정되지 않았을 가능성이 있습니다.

당신이 직면한 문제와 유사한 상황을 해결할 수 있는 예시를 아래 링크에서 찾으실 수 있습니다. 이 예시는 Spring Security 및 OAuth2 설정 중 경험할 수 있는 일반적인 문제들을 다룹니다:

  • Spring Authorization Server 을 OAuth Client Client 로 등록
    이 링크에서는 Spring Authorization Server와 OAuthClient를 사용하여 설정할 때, issuer-uri 관련 문제를 어떻게 다루는지에 대한 정보를 제공합니다. issuer-uri 설정 시, Spring Boot가 기동될 때 OAuth2 client 설정이 정상적으로 초기화되지 못하고 issuer-uri에 접속하는 중 Connection refused 예외가 발생하는 사례를 설명합니다.

주요한 점은 issuer-uri를 설정할 때 해당 URI가 실제로 접근 가능해야 하며, 올바르게 OIDC 구성 정보를 반환할 수 있어야 한다는 것입니다. 문제 해결을 위해 다음 단계를 고려해 볼 수 있습니다:
1. issuer-uri가 올바르게 설정되었으며, 해당 주소가 서비스 중임을 확인하세요.
2. 로컬 네트워크나 방화벽 설정이 올바르게 되어있는지 검토하세요.
3. OAuth2 공급자가 예상대로 메타데이터 엔드포인트를 제공하는지 확인하세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.