Обработка неявного перенаправления OAuth2 с угловой маршрутизацией с использованием HashLocationStrategy
Я включаю 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 ответ
Вы должны указать маршрутизатору прекратить его махинации, пока вы не закончите обработку 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');