Показать страницу входа для Okta UserRedirectRequiredException - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь создать приложение 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
...