두 개의 리소스 서버가 있습니다. 하나는 전자 메일 알림 API이고 다른 하나는 예약 된 작업을 실행하는 리소스 서버입니다. 예약 된 작업이 시작되면 사용자에게 작업이 시작되었음을 알리기 위해 이메일 서비스에 전화를 겁니다. 두 서비스 모두 인증을 위해 OAuth2를 사용합니다. 예약 된 작업에서 OAuth2RestTemplate을 어떻게 사용할 수 있습니까?
이를 위해, 나는 봄 보안과 봄 부팅을 사용하고 있습니다 : 그것을 제시하여 액세스 토큰을 얻을 수 있도록 예약 된 작업 서비스가 클라이언트의 자격 증명을 설정 한 클라이언트 자격 증명입니다 OAuth2. Task 서비스에는 OAuth2RestTemplate이있어 이메일 서비스로 전화를 겁니다. 예약 된 작업이 실행되어 OAuth2RestTemplate을 사용하려고 시도하면 OAuth2ClientContext를 Sesson 범위의 Bean으로 가져옵니다. 분명히 요청 스레드 내에서 실행되지 않기 때문에 하나를 찾지 않을 것입니다. 백그라운드 작업 스레드에서 작업하고 있습니다.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'scopedTarget.oauth2ClientContext': Scope 'session' is not active for the current thread;
consider defining a scoped proxy for this bean if you intend to refer to it
from a singleton
나는 시스템 간 인증을위한 정적 클라이언트 자격 증명을 사용하고 있기 때문에, 내 액세스 토큰을 처리하기 위해 세션 범위 데이터를 사용하는 좋은 이유가 표시되지 않습니다 :이 예외를 얻을. 모든 스레드가 OAuth2RestTemplate을 통해 요청을 만들 때 사용할 수있는 싱글 톤 OAuth2ClientContext Bean을 선호합니다.
어떻게 구성 할 수 있습니까?
비슷한 일을해야합니다. Quartz 스케쥴러는 OAuth2 보호 REST 서비스에 액세스 할 작업을 호출해야합니다. 나는 OAuth2 흐름을 기반으로하는 사용자 이름/암호를 사용할 수 없지만 클라이언트 ID 기반 흐름을 사용할 수 있습니다. 코드를 공유 할 수 있습니까? 아니면 도움이 될까요? – sunitkatkar