Java и Angular Spotify API Cors - PullRequest
       4

Java и Angular Spotify API Cors

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

Я пытаюсь авторизовать 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, вместо кнопки / наблюдаемых, все работает.

...