Проблема с использованием B2C и HashLocationStrategy
Надеюсь, кто-нибудь сможет решить проблему, с которой я сейчас сталкиваюсь. У меня есть существующая система Angular 7, которая подключается к Azure AD с помощьюmicrosoft-adal-angular6
без каких-либо проблем для входа внутренних пользователей. Член группы, который больше не участвует, разработал дополнительную функцию, позволяющую внешним пользователям регистрироваться / входить в систему с помощью Azure B2C. Это тоже работает, однакоLocationStrategy
в app.module.ts
был изменен на PathLocationStrategy, чтобы включить это. Это вызвало проблемы, если пользователь нажимаетRefresh/F5
поскольку это вызывает 404
.
Я изменил LocationStrategy
вернуться к HashLocationStrategy
который решает проблему с обновлением, и хотя страница B2C отображается правильно, возврата из входа нет. Из того, что я читал, B2C не поддерживает использованиеHashLocationStrategy
хорошо, поскольку он не распознает фрагментированные URI.
Другие предложения заключались в том, чтобы оставить LocationStrategy
как PathLocationStrategy
и справиться с 404
на стороне сервера. Я использую NGINX и указываю404
к index.html
решил как логин B2C, так и проблему обновления. Хотя это одно из возможных решений, для него потребуется дополнительный шаг в автоматизированной установке Dockerized, которая выполняет новую установку NGINX в каждом выпуске перед повторной сборкой кода в рамках конвейера Azure DevOps.
Мой главный вопрос: знает ли кто-нибудь, можно ли использовать HashLocationStrategy при использовании Azure B2C?
В настоящее время URL-адрес B2C открывается следующим образом, при этом различные элементы берутся из файла среды:
let azureLoginUrl = `${environment.AzureThirdParty.azureLoginUrl}p=${environment.AzureThirdParty.p}&client_id=${environment.AzureThirdParty.client_id}&nonce=${environment.AzureThirdParty.nonce}&redirect_uri=${environment.AzureThirdParty.redirect_uri}&scope=${environment.AzureThirdParty.scope}&response_type=${environment.AzureThirdParty.response_type}&state=${environment.AzureThirdParty.state}&prompt=${environment.AzureThirdParty.prompt}&login_hint=${this.f.username.value}`
window.location.href = azureLoginUrl;
Я прошел через отладчик, и есть ссылки на microsoft-adal-angular6 и adal.js. У меня есть охранник аутентификации, который проверяетmicrosoft-adal-angular6
сервис, если пользователь аутентифицирован (MsAdalAngular6Service.prototype, "isAuthenticated")
который, в свою очередь, вызывает adal.js
.
if (this.adalSvc.isAuthenticated)
{
return true;
}
else
{
this.adalSvc.login();
return false;
}
С помощью HashLocationStrategy
приводит к microsoft-adal-angular6
возвращает ложь для isAuthenticated
.