Обработка неявного перенаправления OAuth2 с угловой маршрутизацией с использованием HashLocationStrategy - PullRequest
0 голосов
/ 22 декабря 2018

Я включаю OAuth2 в SPA следующим образом:

  • Неявный тип предоставления является единственным поддерживаемым типом предоставления
  • Приложение My Angular 5 использует HashLocationStrategy для своей маршрутизации

Я не могу изменить ни одно из этих ограничений.

При входе в приложение и перенаправлении URL-адрес перенаправления из конечной точки авторизации выглядит следующим образом:

http://foo/#access_token=(ey...)&token_type=bearer&state=(state...)&expires_in=43199&jti=(jti...)

Это соответствует ожиданиям согласно спецификации OAuth2;параметры, присутствующие в URL перенаправления, должны быть добавлены в виде фрагмента (после «#»).

Проблема, с которой я столкнулся, заключается в том, что Angular интерпретирует символы, следующие за хешем, в соответствии со своей стратегией определения местоположения хеша.Он пытается перенаправить на путь access_token=..., который не существует.

Как мне обойти это?

1 Ответ

0 голосов
/ 22 декабря 2018

Вы должны указать маршрутизатору прекратить его махинации, пока вы не закончите обработку URL.Вот как:

imports: [
  ..
  RouterModule.forRoot(routes, { initialNavigation: false }),
],
...

Теперь любопытный маршрутизатор ничего не будет делать при загрузке страницы. Это означает, что вы должны позаботиться об этом! Идите, проанализируйте свое состояние OAuth, токены и т. Д. Затем выясните, по какому маршруту вы пытались добраться до (например, из redirectUrl,какая-то часть самого фрагмента, что-то от localStorage до перехода на аутентификацию или подобное. После того, как вы это сделали, вызовите маршрутизатор и попросите его возобновить:

this.accessToken = this.url....
this.router.navigate('wherever-you-wanted-to-go-in-the-first-place');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...