Обновление с MSAL Angular версии 4 до версии 5

MsAL Angular v5 требует минимальной версии Angular 19 и удаляет поддержку Angular 15, 16, 17 и 18.

Ознакомьтесь с руководством по миграции MSAL Browser версии 4 до версии 5 для поддержки браузера и других ключевых изменений в базовой @azure/msal-browser библиотеке.

Серьезные изменения в @azure/msal-angular@5

Строгое сопоставление для protectedResourceMap

В msal-angular v5 для записей protectedResourceMap по умолчанию используются строгие правила сопоставления шаблонов URL. Строгое сопоставление обрабатывает метаданные шаблонов как литералы, привязки совпадают с компонентом полного URL-адреса и применяет правила подстановочных знаков узла, которые не охватывают разделители точек. Если в конфигурации v4 использовались менее строгие правила сопоставления, обновите шаблоны protectedResourceMap в соответствии со строгим сопоставлением или временно установите для strictMatching значение false, чтобы сохранить прежнее поведение. Дополнительные сведения см. в документации по перехватчику MSAL .

Предупреждение

Это изменение также может повлиять на незначительные обновления версии 5. Если в минорной версии v5, которую вы изначально использовали (например, 5.0.x), строгое сопоставление ещё не было включено по умолчанию, то обновление до более поздней минорной версии v5 (например, 5.1.x), где строгое сопоставление включено по умолчанию, может незаметно нарушить привязку токена. Основной симптом тот же: ошибки 401 — теперь во время выполнения выводится предупреждение, если strictMatching не настроен явно, но сам сбой сопоставления остается незаметным, а заголовок Authorization больше не добавляется.

Быстрый контрольный список

  1. Просмотрите свои protectedResourceMap ключи. Ключи, представляющие собой только базовые URL-адреса (например, https://api.example.com) без подстановочных знаков и подпутей, больше не будут сопоставляться с запросами к подпутям этого URL. См. распространенные шаблоны сбоев.
  2. Обновите ключи, чтобы использовать точные пути или подстановочные знаки. Каждый ключ должен либо точно соответствовать URL-адресу, который запрашивает приложение, либо использовать суффикс подстановочного знака /* для сопоставления подпутей. См. параметры исправления.
  3. Если ключи загружаются динамически во время выполнения, установите strictMatching: false в качестве временного безопасного значения по умолчанию. Ознакомьтесь с рекомендациями по конфигурациям на основе среды.

Управляемое средой protectedResourceMap

protectedResourceMap Если ваши ключи поступают из файлов Angular environment, APP_INITIALIZER, конфигурации JSON или platformBrowserDynamic, установите strictMatching: false в качестве безопасного значения по умолчанию во время миграции:

export function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration {
  const protectedResourceMap = new Map<string, Array<string>>();
  protectedResourceMap.set(environment.apiConfig.uri, environment.apiConfig.scopes);

  return {
    interactionType: InteractionType.Redirect,
    protectedResourceMap,
    // TODO: Remove once protectedResourceMap keys are updated to use
    // exact paths or wildcard patterns (e.g. "https://api.example.com/*").
    strictMatching: false,
  };
}

После того как все ключи будут перенесены на точные пути или шаблоны с подстановочными знаками, удалите strictMatching: false (или задайте значение true), чтобы воспользоваться более строгим и безопасным поведением сопоставления. Дополнительные сведения см. в руководстве по конфигурациям на основе среды .

logout() удалено

logout() удален. Вместо этого используются типы logoutRedirect() или logoutPopup().

// BEFORE (v4)
this.authService.logout();

// AFTER (v5)
this.authService.logoutRedirect();
// or
this.authService.logoutPopup();

Другие изменения в @azure/msal-angular@5

Синтаксис inject(TOKEN)

MSAL_INSTANCE, MSAL_GUARD_CONFIG, MSAL_INTERCEPTOR_CONFIG и MSAL_BROADCAST_CONFIG теперь разрешаются как типы, а не как строки, для поддержки синтаксиса inject(TOKEN). Это изменение может привести к ошибкам TypeScript в приложениях без явного ввода.

handleRedirectObservable() варианты

handleRedirectObservable() теперь принимает необязательный HandleRedirectPromiseOptions объект, который включает navigateToLoginRequestUrl параметр, который был перемещен из конфигурации @azure/msal-browser@5. Дополнительные сведения см. в документации по перенаправлениям .

// BEFORE (msal-browser v4 configuration)
const msalConfig = {
  auth: {
    clientId: 'your-client-id',
    navigateToLoginRequestUrl: false // This option has moved
  }
};

// AFTER (msal-angular v5)
this.authService.handleRedirectObservable({
  navigateToLoginRequestUrl: false
}).subscribe();

Note

Непосредственная передача хэш-строки в handleRedirectObservable(hash) не рекомендуется. Используйте объект options вместо: handleRedirectObservable({ hash: "#..." })

Samples

Теперь доступны следующие примеры для разработчиков:

См. здесь список текущих примеров MSAL Angular и показанных функций.