OAuth2 с угловой и реактивной пружинной безопасностью - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь реализовать социальный вход в систему с VK для моего приложения Angular и серверной части Spring Webflux. На данный момент у меня есть конечная точка на бэкэнде для обслуживания информации пользователя: localhost:8080/people/me. Я попытался аутентифицировать пользователя на внешнем интерфейсе следующим образом:

ngOnInit(): void {
    this.http.get(USER_INFO_URL)
      .subscribe((resp: Response) => {
        if (resp.status < 300) {
          this.authenticated = true;
          resp.json()
            .then(vkUser => {
              let fields: [string, string] = ['firstName', vkUser.firstName];
              fields['lastName'] = vkUser.lastName;
              this.user = new User(vkUser.id, fields);
            });
        } else {
          window.location.href = AUTH_URL;
        }
      });
  }

Однако, когда мое приложение Spring перенаправляет клиента на VK для аутентификации, VK не предоставляет никаких заголовков CORS, что приводит к сбою механизма.

Может ли кто-нибудь порекомендовать способ использования OAuth2 для пары Angular / Spring? Я использую поток code, поэтому я предполагаю, что сначала мне нужно получить код на внешнем интерфейсе, а затем отправить его на сервер Spring, чтобы он изменил его для маркера доступа.

В то же время я чувствую, что мой подход может быть неправильным, и весь процесс аутентификации должен выполняться на бэкэнде, в то время как на фронтэнде должен быть только cookie, но тогда я не могу понять, как перенаправить AJAX-запрос от внешнего интерфейса до страницы входа в VK, обработайте это на обратном конце и затем вернитесь в приложение Angular.

1 Ответ

3 голосов
/ 17 июня 2019

Это будет невозможно без настройки какого-либо стороннего программного обеспечения (которое будет разрешать перекрестные запросы с вашего веб-сайта) или добавления серверного API-кода в ваше приложение, которое выполнит процесс входа в систему.

Какмы работали над комментариями, у вас уже есть успешный поток входа в систему, работающий за пару циклов запросов.Вы можете использовать тот же поток, чтобы получить действительный сеанс, а затем перенаправить на свое одностраничное приложение.Файл cookie должен быть установлен как файл cookie только по протоколу HTTP (чтобы предотвратить его захват другим JavaScript), но это позволит вам делать запросы к вашему серверу без успешного добавления дополнительных параметров аутентификации.Вам придется проверять этот файл cookie при обслуживании запросов API и писать код обработки, который предлагает пользователю войти в систему, если файл cookie отсутствует или больше не действителен.

Надеюсь, что это поможет!

...