從 MSAL Angular v4 升級到 v5

MSAL Angular v5 要求最低版本為 Angular 19,並取消對 Angular 15、16、17 和 18 的支援。

請參閱 MSAL 瀏覽器 v4 到 v5 遷移指南 ,了解瀏覽器支援及底層 @azure/msal-browser 函式庫的其他重要變更。

重大變更 @azure/msal-angular@5

嚴格比對 protectedResourceMap

在 msal-angular v5 中,對 protectedResourceMap 項目的 URL 模式比對預設會使用嚴格比對語義。 嚴格比對會將模式中繼字元視為字面字元,將比對錨定於整個 URL 元件,並套用不跨越句點分隔符號的主機萬用字元規則。 如果你的 v4 配置依賴較鬆散的匹配行為,請更新你的 protectedResourceMap 模式以符合嚴格匹配,或設定 strictMatching 為 false 暫時保留舊有行為。 更多細節請參閱 MSAL Interceptor文件 。

Warning

此變更也可能影響 v5 的次要升級。 如果你原本採用的 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_CONFIGMSAL_INTERCEPTOR_CONFIGMSAL_BROADCAST_CONFIG,並且現在解析為型別而非字串,以支援inject(TOKEN)語法。 此變更可能會在未明確指定型別的應用程式中導致 TypeScript 錯誤。

handleRedirectObservable() 選項

handleRedirectObservable() 現在接受一個可選的 HandleRedirectPromiseOptions 物件,其中包含從 @azure/msal-browser@5 的組態中移出的 navigateToLoginRequestUrl 選項。 更多細節請參閱 重定向文件 。

// 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) 的做法已淘汰。 改用選項物件: handleRedirectObservable({ hash: "#..." })。

Samples

以下開發人員範例現已推出:

請見 此 處,列出目前的 MSAL Angular 範例及所展示的功能。