좋아, 스프링 소스 코드와 문서를 파고 후, 나는 답을 발견하고 나는 단지의 경우 사람에 여기를 게시하고 같은 질문을 가지고 생각합니다.
스프링의 단말이 /check_token
입니다. CheckTokenEndpoint
클래스에서 볼 수 있듯이 OAuth2 Token Introspection Endpoint에 따라 설계되었습니다. 엔드 포인트의 유일한 매개 변수는 'token'입니다.
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.checkTokenAccess("isAuthenticated()").tokenKeyAccess("permitAll()").passwordEncoder(passwordEncoder());
}
당신이 checkTokenAccess()
가 액세스 할 수있는 인증 요청을 할 수 있습니다 볼 수 있듯이 :
그래서 우선 엔드 포인트가 액세스 할 수 있도록하는 것입니다. 당신의 마이크로 서비스 또는이 엔드 포인트에 전화를해야하는 응용 프로그램에서 이제 permitAll()
를 사용하지 마십시오, 당신은 RemoteTokenServices을 구성해야합니다 : 그것은
@Bean
@Conditional(IfCheckTokenIsEnabled.class)
public ResourceServerTokenServices createResourceServerTokenServices() {
RemoteTokenServices tokenServices = new RemoteTokenServices();
tokenServices.setCheckTokenEndpointUrl("http://localhost:8099/oauth/check_token");
tokenServices.setClientId("my_client_id");
tokenServices.setClientSecret("client_secret"); //cannot be null
return tokenServices;
}
의 그!
그러나이 엔드 포인트는 실제로 스펙대로는 아닙니다. OAuth2에서는이 종점이 기본적으로 액세스 토큰을 추출하는 동안 부울 유형의 노드 'active'가 응답에서 필수임을 언급했습니다. 그러나 자신 만의 엔드 포인트를 만들고 전화를 걸기 위해 봄에 RemoteTokenServices
을 구성 할 수 있습니다.
감사합니다.나는 프로세스에 대해 알고 있으며, 토폴로지 내성 엔드 포인트가 무엇인지에 대해 알고있다. 그러나 스프링이이를 관리하는 방법을 알아야했다. 나는 여기에 답변으로 게시 할 무언가를 발견했다. 어쨌든 고마워. – xbmono