MSAL перенаправляет с хешем в url

В настоящее время я работаю над приложением в angular 6, которое использует AAD для аутентификации пользователей. Здесь я использовал библиотеку azure / msal-angular для подключения к AAD v2. Я инициализировал библиотеку своим идентификатором клиента, как указано в файле readme для проекта, и теперь могу войти в систему.

Проблема заключается в следующем: после входа в систему я настроил URL-адрес перенаправления на: http://localhost:4200/account целевую страницу после входа в систему, где я хочу, чтобы пользователь перешел после успешного входа. Здесь я указал маршрут как таковой:

{ path: 'account', component: AccountDetailedComponent }

Это нормально, за исключением того, что URL-адрес перенаправления из AAD переходит на http://localhost:4200/account#id_token=xxxxx, и, хоть убей, я не могу избавиться от hashbang и id_token.

Я ожидал, что id_token = xxxx будет таким параметром запроса:

http://localhost:4200/account?id_token=xxxx

что сделало бы мой маршрут совпадающим, но это не так, и поэтому маршрут становится недействительным.

Мой вопрос: как я могу найти маршрут, соответствующий указанному маршруту?

Я читал о сопоставлениях в маршрутах, но действительно ли я должен сделать регулярное выражение для сопоставления общего маршрута перенаправления? Я не вижу ни в интерфейсе возможности удалить этот хэшбанг, ни в библиотеке.

Изменить

Причина, по которой я подумал, что это несоответствие маршрута, заключалась в том, что меня снова перенаправили на страницу входа после первоначального перенаправления на / account. Он будет мигать / account # id_token = xxxx, а затем снова перенаправлять на страницу входа. В моем ответе ниже описывается решенная проблема.

Надеюсь, ты сможешь помочь.

С уважением, Крис


person ChrisEenberg    schedule 06.12.2018    source источник
comment
Можете ли вы обновить свой вопрос, указав значения URI перенаправления из регистраций приложений и значение redirectUri из конфигурации MSAL в вашем app.module.ts?   -  person FIL    schedule 07.12.2018
comment
Фактически я решил проблему. Это была ошибка с моей стороны, я вручную вызвал msalService.loginredirect () в моем компоненте oninit, и когда меня перенаправили обратно на мою страницу, он снова автоматически вызвал oninit и вызвал бесконечную последовательность входа в систему. Я опубликуйте полный ответ ниже.   -  person ChrisEenberg    schedule 07.12.2018
comment
Вы разместили вопрос о хэше в url, затем вы написали ответ о бесконечном перенаправлении ... Я не понимаю ...   -  person FIL    schedule 07.12.2018
comment
о, я вижу, я забыл добавить последнюю часть, мне очень жаль. В то время я не думал, что это связано с моей проблемой. Я обновлю свой вопрос, чтобы полностью отразить проблему.   -  person ChrisEenberg    schedule 07.12.2018


Ответы (1)


Итак, я действительно решил свой вопрос. Я сделал ошибку, вызвав msalService.loginredirect() вручную из ngOnInit (). Когда происходило перенаправление на страницу Microsoft, я входил в систему, а затем меня отправляли обратно в свое приложение. Это вызовет тот же msalService.loginRedirect() из метода ngOnInit и, таким образом, никогда не достигнет фактического перенаправления.

Из того, что я смог понять, правильный способ обработки входа в систему - это просто применить canActivate: [MsalGuard] к определенному маршруту и ​​позволить охраннику обработать перенаправление на экран входа в систему, и когда вы вернетесь, он перенаправить на указанный путь без хеша.

Надеюсь, это поможет другим, пытавшимся сделать то же, что и я. Я могу подробнее рассказать о своем решении, если кто-то сочтет это запутанным.

С уважением, Крис

person ChrisEenberg    schedule 07.12.2018
comment
Не могли бы вы подробнее рассказать о своей установке? - person skyguy126; 13.08.2019
comment
Что ты конкретно имеешь ввиду? Что ты хочешь узнать? :) - person ChrisEenberg; 14.08.2019