Spring Boot & OAuth2.0: хотя бы один redirect_uri должен быть зарегистрирован клиентом - PullRequest
0 голосов
/ 21 января 2020

Так что я вхожу в приложение и go во внешнюю функцию, которая требует другого входа (все в приложении). Теперь стало невозможно войти в эту внешнюю функцию, поскольку она выдает ошибку (код 400):

OAuth Error. error="invalid_request", error_description="At least one redirect_uri must be registered with the client."

Эта ошибка выдается, когда я использую приложение или пытаюсь войти во внешнюю функцию напрямую.

Я обновил Spring Boot в проекте до 1.5.22 с 1.4.1, что могло быть причиной этого. После понижения версии Spring Boot до версии 1.4.1 проблема исчезла.

Затем я попытался снова обновить Spring Boot до версии 1.5.22 и дополнительно включил это в application.configuration:

security.oauth2.client.pre-established-redirect-uri=https://page.com
security.oauth2.client.registered-redirect-uri=https://page.com
security.oauth2.client.use-current-uri=false

It не помогло Затем на вкладке «Сеть» браузера я заметил параметр redirect_url в параметрах строки запроса, который отличается от указанного мной. Это было что-то вроде:

https://page.com/oauth-authorized/app

Я обновил файл application.configuration, как указано выше. Однако ничего не изменилось.

Как продолжить?

Какой-то код:


public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

  @Autowired
  @Qualifier("authenticationManagerBean")
  private AuthenticationManager authenticationManager;

  @Autowired
  private TokenStore tokenStore;

  @Autowired
  @Qualifier("clientDetailsServiceImpl")
  private ClientDetailsService clientDetailsService;

  @Autowired
  private DefaultTokenServices tokenServices;

  @Autowired
  private TokenEnhancer tokenEnhancer;

  @Override
  public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints.setClientDetailsService(clientDetailsService);
    endpoints
        .tokenStore(tokenStore)
        .authenticationManager(authenticationManager)
        .tokenServices(tokenServices)
        .tokenEnhancer(tokenEnhancer)
        .pathMapping("/oauth/token", "/api/oauth/token")
        .pathMapping("/oauth/check_token", "/api/oauth/check_token")
        .pathMapping("/oauth/authorize", "/api/oauth/authorize")
        .pathMapping("/oauth/error", "/api/oauth/error");
  }

  @Override
  public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
    oauthServer.checkTokenAccess("permitAll()");
  }

  @Override
  public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients.withClientDetails(clientDetailsService);
  }
}
=================================================================================================

@Service
@Primary
public class ClientDetailsServiceImpl implements ClientDetailsService {

  @Autowired
  private ClientRepository clientRepository;

  @Override
  public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException {
    Client client = clientRepository.findOneByClientId(clientId)
        .orElseThrow(() -> new NoSuchClientException(
            String.format("Client with clientId=%s was not found", clientId)));

    return new com.app.auth.domain.ClientDetails(client);
  }

}

Редактировать: После понижения Spring Boot снова проблема кажется исчезла, но это не так уж и много исправления.

1 Ответ

0 голосов
/ 05 февраля 2020

После аутентификации вам может потребоваться связаться с владельцем ресурса и попросить поддержки, а затем перенаправить на ваше клиентское приложение, или вы можете перенаправить на клиентское приложение напрямую. для этого добавьте redirectUris в конфигурацию вашего сервера авторизации

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter{

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory().withClient("client_id").secret("client_secret").authorizedGrantTypes("authorization_code")
            .scopes("read").authorities("CLIENT").redirectUris("http://localhost:8090/your_redirect_URL");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...