Я пытаюсь создать приложение Spring Boot для получения данных с сервера API с помощью безопасности Okta. Когда я пытаюсь запустить приложение, я получаю UserRedirectRequiredException
. Я попытался добавить фильтры, предложенные в StackOverflow Вопрос , но я все еще получаю UserRedirectRequiredException
.
Когда я пытаюсь через Почтальон, я получаю экран входа компании и после ввода идентификатора пользователя и пароль, сервис возвращает данные успешно. Как я могу эмулировать то же самое через приложение Spring Boot и передать идентификатор пользователя и пароль, чтобы получить токен доступа и передать его на сервер ресурсов?
Любая помощь приветствуется. Или предложите другой способ получения данных с сервера ресурсов.
Мой класс абонентов
import java.util.Arrays;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails;
import org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeResourceDetails;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableOAuth2Client;
import org.springframework.web.client.RestTemplate;
@EnableOAuth2Client
@Configuration
@SpringBootApplication
public class APICaller {
@Autowired
private APIProperties apiProperties;
public static void main(String args[]) {
SpringApplication.run(APIValidator.class, args);
}
@Bean
protected OAuth2ProtectedResourceDetails apiDetails() {
AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
resource.setUserAuthorizationUri(apiProperties.getAuthorizationUri());
resource.setAccessTokenUri(apiProperties.getAccessTokenUri());
resource.setClientId(apiProperties.getClientId());
resource.setClientSecret(apiProperties.getClientSecret());
resource.setScope(Arrays.asList(apiProperties.getScope().split(" ")));
return resource;
}
@Bean
protected RestTemplate apiRestTemplate() {
return new OAuth2RestTemplate(apiDetails());
}
@Bean
public CommandLineRunner run(RestTemplate restTemplate) {
return args -> {
String result = restTemplate.getForObject("https://apidata.company.com/apitest/getaccount?accountnumber=12345&$format=json", String.class);
System.out.println(result);
};
}
}
Исключение:
java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:821) [spring-boot-2.0.5.RELEASE.jar:2.0.5.RELEASE]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:802) [spring-boot-2.0.5.RELEASE.jar:2.0.5.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:341) [spring-boot-2.0.5.RELEASE.jar:2.0.5.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1277) [spring-boot-2.0.5.RELEASE.jar:2.0.5.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1265) [spring-boot-2.0.5.RELEASE.jar:2.0.5.RELEASE]
at APICaller.main(APICaller.java:26) [classes/:na]
Caused by: org.springframework.security.oauth2.client.resource.UserRedirectRequiredException: A redirect is required to get the users approval
at org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider.getRedirectForAuthorization(AuthorizationCodeAccessTokenProvider.java:358) ~[spring-security-oauth2-2.3.6.RELEASE.jar:na]
at org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider.obtainAccessToken(AuthorizationCodeAccessTokenProvider.java:205) ~[spring-security-oauth2-2.3.6.RELEASE.jar:na]
at org.springframework.security.oauth2.client.token.AccessTokenProviderChain.obtainNewAccessTokenInternal(AccessTokenProviderChain.java:148) ~[spring-security-oauth2-2.3.6.RELEASE.jar:na]
at org.springframework.security.oauth2.client.token.AccessTokenProviderChain.obtainAccessToken(AccessTokenProviderChain.java:121) ~[spring-security-oauth2-2.3.6.RELEASE.jar:na]
at org.springframework.security.oauth2.client.OAuth2RestTemplate.acquireAccessToken(OAuth2RestTemplate.java:221) ~[spring-security-oauth2-2.3.6.RELEASE.jar:na]
at org.springframework.security.oauth2.client.OAuth2RestTemplate.getAccessToken(OAuth2RestTemplate.java:173) ~[spring-security-oauth2-2.3.6.RELEASE.jar:na]
at org.springframework.security.oauth2.client.OAuth2RestTemplate.createRequest(OAuth2RestTemplate.java:105) ~[spring-security-oauth2-2.3.6.RELEASE.jar:na]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:683) ~[spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.security.oauth2.client.OAuth2RestTemplate.doExecute(OAuth2RestTemplate.java:128) ~[spring-security-oauth2-2.3.6.RELEASE.jar:na]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:644) ~[spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:296) ~[spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at APIValidator.lambda$run$0(APIValidator.java:78) ~[classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:818) [spring-boot-2.0.5.RELEASE.jar:2.0.5.RELEASE]
... 5 common frames omitted