Я пытаюсь авторизовать API spotify, используя spring + angular.
Сторона сервера: RestController, который отправляет данные авторизации для API spotify и выполняет перенаправление. Сторона клиента: Angular, 1 кнопка, отправляющая запрос этому restController.
Сторона сервера:
@RestController
public class SpotifyAuthRest {
@GetMapping("/auth")
public ResponseEntity spotifyAuth() {
HttpHeaders headers = new HttpHeaders();
headers.setLocation(URI.create("https://accounts.spotify.com/authorize?response_type=code&client_id=xxx&redirect_uri=http://localhost:8080/"));
ResponseEntity redirect = new ResponseEntity<>(headers, HttpStatus.TEMPORARY_REDIRECT);
return redirect;
}
}
Сторона клиента:
<button (click)="authorize()">Authorize</button>
authorize() {
this.http.get("/auth").subscribe((data) => {
}, (error) => {
})
}
Если я просто go до http://localhost:8080/auth
, все работает, и я перенаправлен, чтобы подделать страницу входа. Однако, если я нажимаю кнопку авторизации, которая вызывает http://localhost:8080/auth
, я получаю ошибки CORS.
Access to XMLHttpRequest at 'https://accounts.spotify.com/authorize?response_type=code&client_id=xxx&redirect_uri=http://localhost:8080/' (redirected from 'http://localhost:8080/auth') from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Чего мне здесь не хватает?
НЕ СВЯЗАННОЕ ПРИМЕЧАНИЕ
Поскольку я уже писал: в документации spotify говорится, чтобы скрыть свой clientId и использовать его для отправки на серверную сторону, что имеет смысл. Но когда после авторизации выполняется перенаправление на https://accounts.spotify.com/
, clientId виден в URL, так где же безопасность?
РЕДАКТИРОВАТЬ
Если вы используете простую гиперссылку, скажем <a href="/auth">Authorize</a>
в angular, вместо кнопки / наблюдаемых, все работает.