Проблема с использованием 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.

0 ответов

Другие вопросы по тегам