Я пытаюсь интегрировать мой текущий проект с внешним API аутентификации, и сейчас моя цель - это перенаправление на внешний URL:
https://auth.mercadolivre.com.br/authorization?response_type=code&client_id=$APP_ID
, где происходит процесс авторизации, после чего он перенаправляется обратно к моему приложению с таким URL:
http://YOUR_REDIRECT_URI?code=SERVER_GENERATED_AUTHORIZATION_CODE
, где мне нужно хранить внутреннюю переменную code
.
Я получил этот код до сих пор, основываясь на доступных примерах здесь и здесь :
public String getCode() throws ApiException, URISyntaxException {
Client client = ClientBuilder.newClient();
WebTarget resourceTarget = client.target(getApi().getLocation());
// Build a HTTP GET request that accepts "text/plain" response type
// and contains a custom HTTP header entry "Foo: bar".
Invocation invocation = resourceTarget.request("text/plain").buildGet();
// Invoke the request using generic interface
String response = invocation.invoke(String.class);
return response;
}
@POST
public Response getApi() throws ApiException, URISyntaxException {
getAuthUrl();
URI targetURIForRedirection = new URI(auth_url);
return Response.temporaryRedirect(targetURIForRedirection).build();
}
Но, несмотря на то, что приложение достигает пункта назначения, вместо открытия в браузере, html выводится на консоль и выдается ошибка (что-то вроде недопустимого символа в коде, выведенном на консоль).
Я просто хочу, из приведенных выше методов, перенаправить пользователя на страницу авторизации (первая ссылка), и когда процесс заканчивается, выполните оставшуюся часть кода, сохраняя значение, возвращаемое для использования в будущем.
Для справки, этот код вызывается из AuthenticationManager в моем Spring-Sec слой урти. Реализация, которую я получил до сих пор:
@Configuration
@EnableWebSecurity
public class Security extends WebSecurityConfigurerAdapter {
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return new AuthManager();
}
@Override
public void configure(HttpSecurity http) throws Exception {
...
}
@Override
public void configure(WebSecurity web) throws Exception {
...
}
public class AuthManager implements AuthenticationManager {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
MercadoLivre mercadoLivre = new MercadoLivre();
try {
mercadoLivre.getAccessToken();
UserResponse data = (UserResponse) mercadoLivre.GET("/users/"+mercadoLivre.getUserId().toString());
return new AuthResponse(data);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
public class AuthResponse implements Authentication {
...
}
}
метод вызывается изнутри getAccessToken()
.