diff --git a/msal-javascript-conceptual/angular/configuration.md b/msal-javascript-conceptual/angular/configuration.md index d3c5538..8c419fc 100644 --- a/msal-javascript-conceptual/angular/configuration.md +++ b/msal-javascript-conceptual/angular/configuration.md @@ -1,23 +1,25 @@ --- title: MSAL Angular Configuration description: Learn how to configure your Angular application to use MSAL Angular -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # MSAL Angular Configuration MSAL for Angular can be configured in multiple ways: -- `MsalModule.forRoot` -- Factory providers -- `platformBrowserDynamic` -- Dynamic configurations using Factory Providers and `APP_INITIALIZER` + +1. [`MsalModule.forRoot`](#msalmoduleforroot) +1. [Factory providers](#factory-providers) +1. [`platformBrowserDynamic`](#platformbrowserdynamic) +1. [Dynamic configurations using Factory Providers and `APP_INITIALIZER`](#dynamic-configurations-using-factory-providers-and-app_initializer) +1. [Configurations for Angular apps with standalone components](#configurations-for-angular-apps-with-standalone-components) This guide will detail how to leverage each method for your application. @@ -25,22 +27,22 @@ This guide will detail how to leverage each method for your application. `@azure/msal-angular` accepts three configuration objects: -1. [Configuration](https://azuread.github.io/microsoft-authentication-library-for-js/ref/modules/_azure_msal_browser.html#configuration): This is the same configuration object that is used for the core `@azure/msal-browser` library. All configuration options can be found [here](https://azuread.github.io/microsoft-authentication-library-for-js/ref/modules/_azure_msal_browser.html#configuration). +1. [Configuration](https://azuread.github.io/microsoft-authentication-library-for-js/ref/modules/_azure_msal_browser.html#configuration): This is the same configuration object that is used for the core `@azure/msal-browser` library. All configuration options can be found [here](https://azuread.github.io/microsoft-authentication-library-for-js/ref/types/_azure_msal_browser.Configuration.html). 2. [`MsalGuardConfiguration`](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/src/msal.guard.config.ts): A set of options specifically for the Angular guard. 3. [`MsalInterceptorConfiguration`](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/src/msal.interceptor.config.ts): A set of options specifically for the Angular interceptor. ### Angular-specific configurations -* An `interactionType` must be specified on `MsalGuardConfiguration` and `MsalInterceptorConfiguration`, and can be set to `Popup` or `Redirect`. -* The `protectedResourceMap` object on `MsalInterceptorConfiguration` is used to protect routes. -* An optional `authRequest` object can be specified on `MsalGuardConfiguration` and `MsalInterceptorConfiguration` to set additional options. -* An optional `loginFailedRoute` string can be set on `MsalGuardConfiguration`. Msal Guard will redirect to this route if login is required and fails. +- An `interactionType` must be specified on `MsalGuardConfiguration` and `MsalInterceptorConfiguration`, and can be set to `Popup` or `Redirect`. +- The `protectedResourceMap` object on `MsalInterceptorConfiguration` is used to protect routes. +- An optional `authRequest` object can be specified on `MsalGuardConfiguration` and `MsalInterceptorConfiguration` to set additional options. +- An optional `loginFailedRoute` string can be set on `MsalGuardConfiguration`. Msal Guard will redirect to this route if login is required and fails. Please see our [MsalInterceptor](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/msal-interceptor.md) and [MsalGuard](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/msal-guard.md) docs for more details on configurations, usage, and differences to MSAL Angular v1. ### Configuration for redirects -We recommend importing `MsalRedirectComponent` and bootstrapping with the `AppComponent` if you intend to use redirects. Please see the [redirect documentation](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/redirects.md) for more details. +We recommend importing `MsalRedirectComponent` and bootstrapping with the `AppComponent` if you intend to use redirects. Please see the [redirect documentation](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/redirects.md) for more details. **Note:** As of MSAL v3.x, initialization of the application object is now required. See the [v2-v3 upgrade guide](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/v2-v3-upgrade-guide.md) for more details. @@ -49,52 +51,57 @@ We recommend importing `MsalRedirectComponent` and bootstrapping with the `AppCo The `MsalModule` class contains a static method that can be called in your `app.module.ts` file: ```typescript -import { NgModule } from '@angular/core'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { AppComponent } from './app.component'; +import { NgModule } from "@angular/core"; +import { HTTP_INTERCEPTORS } from "@angular/common/http"; +import { AppComponent } from "./app.component"; import { MsalModule, MsalService, MsalGuard, MsalInterceptor, MsalBroadcastService, MsalRedirectComponent } from "@azure/msal-angular"; import { PublicClientApplication, InteractionType, BrowserCacheLocation } from "@azure/msal-browser"; @NgModule({ - imports: [ - MsalModule.forRoot( new PublicClientApplication({ // MSAL Configuration - auth: { - clientId: "clientid", - authority: "https://login.microsoftonline.com/common/", - redirectUri: "http://localhost:4200/", - postLogoutRedirectUri: "http://localhost:4200/", - navigateToLoginRequestUrl: true - }, - cache: { - cacheLocation : BrowserCacheLocation.LocalStorage, - storeAuthStateInCookie: true, // set to true for IE 11 - }, - system: { - loggerOptions: { - loggerCallback: () => {}, - piiLoggingEnabled: false - } - } - }), { - interactionType: InteractionType.Popup, // MSAL Guard Configuration - authRequest: { - scopes: ['user.read'] - }, - loginFailedRoute: "/login-failed" - }, { - interactionType: InteractionType.Redirect, // MSAL Interceptor Configuration - protectedResourceMap - }) - ], - providers: [ - { - provide: HTTP_INTERCEPTORS, - useClass: MsalInterceptor, - multi: true + imports: [ + MsalModule.forRoot( + new PublicClientApplication({ + // MSAL Configuration + auth: { + clientId: "clientid", + authority: "https://login.microsoftonline.com/common/", + redirectUri: "http://localhost:4200/", + postLogoutRedirectUri: "http://localhost:4200/", + navigateToLoginRequestUrl: true, + }, + cache: { + cacheLocation: BrowserCacheLocation.LocalStorage, + storeAuthStateInCookie: true, // Deprecated, will be removed in the next major version + }, + system: { + loggerOptions: { + loggerCallback: () => {}, + piiLoggingEnabled: false, + }, + }, + }), + { + interactionType: InteractionType.Popup, // MSAL Guard Configuration + authRequest: { + scopes: ["user.read"], }, - MsalGuard - ], - bootstrap: [AppComponent, MsalRedirectComponent] + loginFailedRoute: "/login-failed", + }, + { + interactionType: InteractionType.Redirect, // MSAL Interceptor Configuration + protectedResourceMap, + } + ), + ], + providers: [ + { + provide: HTTP_INTERCEPTORS, + useClass: MsalInterceptor, + multi: true, + }, + MsalGuard, + ], + bootstrap: [AppComponent, MsalRedirectComponent], }) export class AppModule {} ``` @@ -104,28 +111,18 @@ export class AppModule {} You may also provide the configuration options via factory providers. ```typescript -import { - MsalModule, - MsalService, - MsalInterceptor, - MsalInterceptorConfiguration, - MsalGuard, - MsalGuardConfiguration, - MsalBroadcastService, - MsalRedirectComponent -} from "@azure/msal-angular"; +import { MsalModule, MsalService, MsalInterceptor, MsalInterceptorConfiguration, MsalGuard, MsalGuardConfiguration, MsalBroadcastService, MsalRedirectComponent } from "@azure/msal-angular"; import { IPublicClientApplication, PublicClientApplication, InteractionType, BrowserCacheLocation } from "@azure/msal-browser"; export function MSALInstanceFactory(): IPublicClientApplication { return new PublicClientApplication({ auth: { - clientId: "00001111-aaaa-2222-bbbb-3333cccc4444", + clientId: "b5c2e510-4a17-4feb-b219-e55aa5b74144", redirectUri: "http://localhost:4200", - postLogoutRedirectUri: "http://localhost:4200" + postLogoutRedirectUri: "http://localhost:4200", }, cache: { cacheLocation: BrowserCacheLocation.LocalStorage, - storeAuthStateInCookie: isIE, // set to true for IE 11 }, }); } @@ -141,86 +138,80 @@ export function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration { } export function MSALGuardConfigFactory(): MsalGuardConfiguration { - return { + return { interactionType: InteractionType.Redirect, authRequest: { - scopes: ['user.read'] + scopes: ["user.read"], }, - loginFailedRoute: "./login-failed" + loginFailedRoute: "./login-failed", }; } @NgModule({ - imports: [ - MsalModule - ], + imports: [MsalModule], providers: [ { provide: HTTP_INTERCEPTORS, useClass: MsalInterceptor, - multi: true + multi: true, }, { provide: MSAL_INSTANCE, - useFactory: MSALInstanceFactory + useFactory: MSALInstanceFactory, }, { provide: MSAL_GUARD_CONFIG, - useFactory: MSALGuardConfigFactory + useFactory: MSALGuardConfigFactory, }, { provide: MSAL_INTERCEPTOR_CONFIG, - useFactory: MSALInterceptorConfigFactory + useFactory: MSALInterceptorConfigFactory, }, MsalGuard, MsalBroadcastService, - MsalService + MsalService, ], - bootstrap: [AppComponent, MsalRedirectComponent] + bootstrap: [AppComponent, MsalRedirectComponent], }) -export class AppModule { } +export class AppModule {} ``` ## platformBrowserDynamic -If you need to dynamically configure MSAL Angular (e.g. based on values returned from an API), you can use `platformBrowserDynamic`. `platformBrowserDyamic` is a platform factory, used to bootstrap the application, and is able to take in configuration options. `platformBrowserDynamic` should already be present when the Angular application is set up. +If you need to dynamically configure MSAL Angular (e.g. based on values returned from an API), you can use `platformBrowserDynamic`. `platformBrowserDynamic` is a platform factory, used to bootstrap the application, and is able to take in configuration options. `platformBrowserDynamic` should already be present when the Angular application is set up. The following is an example of how to dynamically configure `@azure/msal-angular` with `platformBrowserDynamic` and a json file: `app.module.ts` + ```typescript -import { - MsalModule, - MsalInterceptor, - MsalService, -} from '@azure/msal-angular'; +import { MsalModule, MsalInterceptor, MsalService } from "@azure/msal-angular"; @NgModule({ - imports: [ - MsalModule - ], + imports: [MsalModule], providers: [ { provide: HTTP_INTERCEPTORS, useClass: MsalInterceptor, - multi: true + multi: true, }, - MsalService + MsalService, ], - bootstrap: [AppComponent] + bootstrap: [AppComponent], }) -export class AppModule { } +export class AppModule {} ``` `main.ts` + ```typescript -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { enableProdMode } from "@angular/core"; +import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; -import { MSAL_INSTANCE, MSAL_GUARD_CONFIG, MSAL_INTERCEPTOR_CONFIG } from '@azure/msal-angular'; -import { PublicClientApplication, Configuration } from '@azure/msal-browser'; +import { AppModule } from "./app/app.module"; +import { environment } from "./environments/environment"; +import { MSAL_INSTANCE, MSAL_GUARD_CONFIG, MSAL_INTERCEPTOR_CONFIG } from "@azure/msal-angular"; +import { PublicClientApplication, Configuration } from "@azure/msal-browser"; if (environment.production) { enableProdMode(); @@ -230,37 +221,47 @@ function loggerCallback(logLevel: LogLevel, message: string) { console.log("MSAL Angular: ", message); } -fetch('/assets/configuration.json') - .then(response => response.json()) - .then(json => { +fetch("/assets/configuration.json") + .then((response) => response.json()) + .then((json) => { platformBrowserDynamic([ - { provide: MSAL_INSTANCE, useValue: new PublicClientApplication({ - auth: json.msal.auth, - cache: json.msal.cache, - system: { - loggerOptions: { - loggerCallback, - logLevel: LogLevel.Info, - piiLoggingEnabled: false - } - } - }) }, - { provide: MSAL_GUARD_CONFIG, useValue: { - interactionType: json.guard.interactionType, - authRequest: json.guard.authRequest, - loginFailedRoute: json.guard.loginFailedRoute - } as MsalGuardConfiguration }, - { provide: MSAL_INTERCEPTOR_CONFIG, useValue: { - interactionType: json.interceptor.interactionType, - protectedResourceMap: new Map(json.interceptor.protectedResourceMap) - } as MsalInterceptorConfiguration }, + { + provide: MSAL_INSTANCE, + useValue: new PublicClientApplication({ + auth: json.msal.auth, + cache: json.msal.cache, + system: { + loggerOptions: { + loggerCallback, + logLevel: LogLevel.Info, + piiLoggingEnabled: false, + }, + }, + }), + }, + { + provide: MSAL_GUARD_CONFIG, + useValue: { + interactionType: json.guard.interactionType, + authRequest: json.guard.authRequest, + loginFailedRoute: json.guard.loginFailedRoute, + } as MsalGuardConfiguration, + }, + { + provide: MSAL_INTERCEPTOR_CONFIG, + useValue: { + interactionType: json.interceptor.interactionType, + protectedResourceMap: new Map(json.interceptor.protectedResourceMap), + } as MsalInterceptorConfiguration, + }, ]) .bootstrapModule(AppModule) - .catch(err => console.error(err)); + .catch((err) => console.error(err)); }); ``` `src/assets/configuration.json` + ```json { "msal": { @@ -281,13 +282,11 @@ fetch('/assets/configuration.json') "authRequest": { "scopes": ["user.read"] }, - "loginFailedRoute": "/login-failed" + "loginFailedRoute": "/login-failed" }, "interceptor": { "interactionType": "redirect", - "protectedResourceMap": [ - ["https://graph.microsoft.com/v1.0/me", ["user.read"]] - ] + "protectedResourceMap": [["https://graph.microsoft.com/v1.0/me", ["user.read"]]] } } ``` @@ -297,13 +296,14 @@ fetch('/assets/configuration.json') To dynamically configure MSAL Angular, you can use the Factory Providers with APP_INITIALIZER. `src/app/config.service.ts` + ```typescript -import { Injectable } from '@angular/core'; -import { HttpClient, HttpBackend } from '@angular/common/http'; -import { map } from 'rxjs/operators'; +import { Injectable } from "@angular/core"; +import { HttpClient, HttpBackend } from "@angular/common/http"; +import { map } from "rxjs/operators"; @Injectable({ - providedIn: 'root' + providedIn: "root", }) export class ConfigService { private settings: any; @@ -315,14 +315,18 @@ export class ConfigService { init(endpoint: string): Promise { return new Promise((resolve, reject) => { - this.http.get(endpoint).pipe(map(result => result)) - .subscribe(value => { - this.settings = value; - resolve(true); - }, - (error) => { - reject(error); - }); + this.http + .get(endpoint) + .pipe(map((result) => result)) + .subscribe( + (value) => { + this.settings = value; + resolve(true); + }, + (error) => { + reject(error); + } + ); }); } @@ -332,7 +336,7 @@ export class ConfigService { } if (!Array.isArray(key)) { - key = key.split('.'); + key = key.split("."); } let result = key.reduce((account: any, current: string) => account && account[current], this.settings); @@ -343,149 +347,131 @@ export class ConfigService { ``` `src/app/msal-config-dynamic.module.ts` + ```typescript -import { InjectionToken, NgModule, APP_INITIALIZER } from '@angular/core'; -import { IPublicClientApplication, PublicClientApplication, - LogLevel } from '@azure/msal-browser'; -import { MsalGuard, MsalInterceptor, MsalBroadcastService, - MsalInterceptorConfiguration, MsalModule, MsalService, - MSAL_GUARD_CONFIG, MSAL_INSTANCE, MSAL_INTERCEPTOR_CONFIG, - MsalGuardConfiguration } from '@azure/msal-angular'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { ConfigService } from './config.service'; - -const AUTH_CONFIG_URL_TOKEN = new InjectionToken('AUTH_CONFIG_URL'); +import { InjectionToken, NgModule, APP_INITIALIZER } from "@angular/core"; +import { IPublicClientApplication, PublicClientApplication, LogLevel } from "@azure/msal-browser"; +import { MsalGuard, MsalInterceptor, MsalBroadcastService, MsalInterceptorConfiguration, MsalModule, MsalService, MSAL_GUARD_CONFIG, MSAL_INSTANCE, MSAL_INTERCEPTOR_CONFIG, MsalGuardConfiguration } from "@azure/msal-angular"; +import { HTTP_INTERCEPTORS } from "@angular/common/http"; +import { ConfigService } from "./config.service"; + +const AUTH_CONFIG_URL_TOKEN = new InjectionToken("AUTH_CONFIG_URL"); export function initializerFactory(env: ConfigService, configUrl: string): any { - const promise = env.init(configUrl).then((value) => { - console.log('finished getting configurations dynamically.'); - }); - return () => promise; + const promise = env.init(configUrl).then((value) => { + console.log("finished getting configurations dynamically."); + }); + return () => promise; } -const isIE = window.navigator.userAgent.indexOf("MSIE ") > -1 || window.navigator.userAgent.indexOf("Trident/") > -1; // Remove this line to use Angular Universal - export function loggerCallback(logLevel: LogLevel, message: string) { console.log(message); } export function MSALInstanceFactory(config: ConfigService): IPublicClientApplication { return new PublicClientApplication({ - auth: config.getSettings('msal').auth, - cache: config.getSettings('msal').cache, + auth: config.getSettings("msal").auth, + cache: config.getSettings("msal").cache, system: { loggerOptions: { loggerCallback, logLevel: LogLevel.Info, - piiLoggingEnabled: false - } - } + piiLoggingEnabled: false, + }, + }, }); } export function MSALInterceptorConfigFactory(config: ConfigService): MsalInterceptorConfiguration { - const protectedResourceMap = new Map>(config.getSettings('interceptor').protectedResourceMap) - - return { - interactionType: config.getSettings('interceptor').interactionType, - protectedResourceMap - }; - } - + const protectedResourceMap = new Map>(config.getSettings("interceptor").protectedResourceMap); + + return { + interactionType: config.getSettings("interceptor").interactionType, + protectedResourceMap, + }; +} + export function MSALGuardConfigFactory(config: ConfigService): MsalGuardConfiguration { - return { - interactionType: config.getSettings('guard').interactionType, - authRequest: config.getSettings('guard').authRequest, - loginFailedRoute: config.getSettings('guard').loginFailedRoute - }; + return { + interactionType: config.getSettings("guard").interactionType, + authRequest: config.getSettings("guard").authRequest, + loginFailedRoute: config.getSettings("guard").loginFailedRoute, + }; } @NgModule({ - providers: [], - imports: [MsalModule] + providers: [], + imports: [MsalModule], }) export class MsalConfigDynamicModule { - - static forRoot(configFile: string) { - return { - ngModule: MsalConfigDynamicModule, - providers: [ - ConfigService, - { provide: AUTH_CONFIG_URL_TOKEN, useValue: configFile }, - { provide: APP_INITIALIZER, useFactory: initializerFactory, - deps: [ConfigService, AUTH_CONFIG_URL_TOKEN], multi: true }, - { - provide: MSAL_INSTANCE, - useFactory: MSALInstanceFactory, - deps: [ConfigService] - }, - { - provide: MSAL_GUARD_CONFIG, - useFactory: MSALGuardConfigFactory, - deps: [ConfigService] - }, - { - provide: MSAL_INTERCEPTOR_CONFIG, - useFactory: MSALInterceptorConfigFactory, - deps: [ConfigService] - }, - MsalService, - MsalGuard, - MsalBroadcastService, - { - provide: HTTP_INTERCEPTORS, - useClass: MsalInterceptor, - multi: true - } - ] - }; - } + static forRoot(configFile: string) { + return { + ngModule: MsalConfigDynamicModule, + providers: [ + ConfigService, + { provide: AUTH_CONFIG_URL_TOKEN, useValue: configFile }, + { provide: APP_INITIALIZER, useFactory: initializerFactory, deps: [ConfigService, AUTH_CONFIG_URL_TOKEN], multi: true }, + { + provide: MSAL_INSTANCE, + useFactory: MSALInstanceFactory, + deps: [ConfigService], + }, + { + provide: MSAL_GUARD_CONFIG, + useFactory: MSALGuardConfigFactory, + deps: [ConfigService], + }, + { + provide: MSAL_INTERCEPTOR_CONFIG, + useFactory: MSALInterceptorConfigFactory, + deps: [ConfigService], + }, + MsalService, + MsalGuard, + MsalBroadcastService, + { + provide: HTTP_INTERCEPTORS, + useClass: MsalInterceptor, + multi: true, + }, + ], + }; + } } ``` + `src/app/app.module.ts` + ```typescript -import { BrowserModule } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { NgModule } from '@angular/core'; +import { BrowserModule } from "@angular/platform-browser"; +import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; +import { NgModule } from "@angular/core"; -import { MatButtonModule } from '@angular/material/button'; -import { MatToolbarModule } from '@angular/material/toolbar'; -import { MatListModule } from '@angular/material/list'; +import { MatButtonModule } from "@angular/material/button"; +import { MatToolbarModule } from "@angular/material/toolbar"; +import { MatListModule } from "@angular/material/list"; -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { HomeComponent } from './home/home.component'; -import { ProfileComponent } from './profile/profile.component'; +import { AppRoutingModule } from "./app-routing.module"; +import { AppComponent } from "./app.component"; +import { HomeComponent } from "./home/home.component"; +import { ProfileComponent } from "./profile/profile.component"; -import { HttpClientModule } from '@angular/common/http'; -import { MsalRedirectComponent } from '@azure/msal-angular'; -import { DetailComponent } from './detail/detail.component'; -import { MsalConfigDynamicModule } from './msal-config-dynamic.module'; +import { HttpClientModule } from "@angular/common/http"; +import { MsalRedirectComponent } from "@azure/msal-angular"; +import { DetailComponent } from "./detail/detail.component"; +import { MsalConfigDynamicModule } from "./msal-config-dynamic.module"; @NgModule({ - declarations: [ - AppComponent, - HomeComponent, - ProfileComponent, - DetailComponent - ], - imports: [ - BrowserModule, - BrowserAnimationsModule, - AppRoutingModule, - MatButtonModule, - MatToolbarModule, - MatListModule, - HttpClientModule, - MsalConfigDynamicModule.forRoot('assets/configuration.json') - ], + declarations: [AppComponent, HomeComponent, ProfileComponent, DetailComponent], + imports: [BrowserModule, BrowserAnimationsModule, AppRoutingModule, MatButtonModule, MatToolbarModule, MatListModule, HttpClientModule, MsalConfigDynamicModule.forRoot("assets/configuration.json")], providers: [], - bootstrap: [AppComponent, MsalRedirectComponent] + bootstrap: [AppComponent, MsalRedirectComponent], }) -export class AppModule { } +export class AppModule {} ``` `src/assets/configuration.json` + ```json { "msal": { @@ -506,13 +492,11 @@ export class AppModule { } "authRequest": { "scopes": ["user.read"] }, - "loginFailedRoute": "/login-failed" + "loginFailedRoute": "/login-failed" }, "interceptor": { "interactionType": "redirect", - "protectedResourceMap": [ - ["https://graph.microsoft.com/v1.0/me", ["user.read"]] - ] + "protectedResourceMap": [["https://graph.microsoft.com/v1.0/me", ["user.read"]]] } } ``` @@ -523,16 +507,116 @@ The **MsalGuard** also allows you to dynamically change the **authRequest** at r ```js export function MSALGuardConfigFactory(): MsalGuardConfiguration { - return { + return { interactionType: InteractionType.Redirect, authRequest: (authService, state) => { return { - scopes: state.root.url.some(x => x.path === 'calendar') - ? ['user.read', ' Calendars.Read'] - : ['user.read'] - } + scopes: state.root.url.some((x) => x.path === "calendar") ? ["user.read", " Calendars.Read"] : ["user.read"], + }; }, - loginFailedRoute: "./login-failed" + loginFailedRoute: "./login-failed", }; } ``` + +## Configurations for Angular apps with standalone components + +Angular applications using standalone components can be used with [factory providers](#factory-providers) as above in the `app.config.ts` file, which is then imported into `main.ts` for bootstrapping. + +Please see our [Angular Standalone Sample](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/msal-angular-samples/angular-standalone-sample) for usage. + +```ts +// app.config.ts +import { ApplicationConfig, importProvidersFrom } from "@angular/core"; +import { provideRouter } from "@angular/router"; +import { routes } from "./app.routes"; +import { BrowserModule } from "@angular/platform-browser"; +import { provideHttpClient, withInterceptorsFromDi, HTTP_INTERCEPTORS, withFetch, withInterceptors } from "@angular/common/http"; +import { provideNoopAnimations } from "@angular/platform-browser/animations"; +import { IPublicClientApplication, PublicClientApplication, InteractionType, BrowserCacheLocation, LogLevel } from "@azure/msal-browser"; +import { MsalInterceptor, MSAL_INSTANCE, MsalInterceptorConfiguration, MsalGuardConfiguration, MSAL_GUARD_CONFIG, MSAL_INTERCEPTOR_CONFIG, MsalService, MsalGuard, MsalBroadcastService } from "@azure/msal-angular"; + +export function loggerCallback(logLevel: LogLevel, message: string) { + console.log(message); +} + +export function MSALInstanceFactory(): IPublicClientApplication { + return new PublicClientApplication({ + auth: { + clientId: "clientid", + authority: "https://login.microsoftonline.com/common/", + redirectUri: "/", + postLogoutRedirectUri: "/", + }, + cache: { + cacheLocation: BrowserCacheLocation.LocalStorage, + }, + system: { + allowPlatformBroker: false, // Disables WAM Broker + loggerOptions: { + loggerCallback, + logLevel: LogLevel.Info, + piiLoggingEnabled: false, + }, + }, + }); +} + +export function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration { + const protectedResourceMap = new Map>(); + protectedResourceMap.set("https://graph.microsoft.com/v1.0/me", ["user.read"]); + + return { + interactionType: InteractionType.Redirect, + protectedResourceMap, + }; +} + +export function MSALGuardConfigFactory(): MsalGuardConfiguration { + return { + interactionType: InteractionType.Redirect, + authRequest: { + scopes: ["user.read"], + }, + loginFailedRoute: "/login-failed", + }; +} + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(routes), + importProvidersFrom(BrowserModule), + provideNoopAnimations(), + provideHttpClient(withInterceptorsFromDi(), withFetch()), + { + provide: HTTP_INTERCEPTORS, + useClass: MsalInterceptor, + multi: true, + }, + { + provide: MSAL_INSTANCE, + useFactory: MSALInstanceFactory, + }, + { + provide: MSAL_GUARD_CONFIG, + useFactory: MSALGuardConfigFactory, + }, + { + provide: MSAL_INTERCEPTOR_CONFIG, + useFactory: MSALInterceptorConfigFactory, + }, + MsalService, + MsalGuard, + MsalBroadcastService, + ], +}; +``` + +```ts +// main.ts +import { bootstrapApplication } from "@angular/platform-browser"; +import { appConfig } from "./app/app.config"; +import { AppComponent } from "./app/app.component"; + +bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +``` diff --git a/msal-javascript-conceptual/angular/errors.md b/msal-javascript-conceptual/angular/errors.md index 10ee431..101eb21 100644 --- a/msal-javascript-conceptual/angular/errors.md +++ b/msal-javascript-conceptual/angular/errors.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Errors in MSAL Angular diff --git a/msal-javascript-conceptual/angular/events.md b/msal-javascript-conceptual/angular/events.md index ed487b9..8987e36 100644 --- a/msal-javascript-conceptual/angular/events.md +++ b/msal-javascript-conceptual/angular/events.md @@ -7,14 +7,14 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Events in MSAL Angular -Before you start here, make sure you understand how to [initialize the application object](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/initialization.md). +Before you start here, make sure you understand how to [initialize the application object](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/initialization.md). `@azure/msal-angular` uses the event system exposed by `@azure/msal-browser`, which emits events related to auth and MSAL, and can be used for updating UI, showing error messages, and so on. @@ -70,7 +70,7 @@ ngOnInit(): void { } ``` -For the full example of using events, please see our sample [here](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/samples/msal-angular-v3-samples/angular15-sample-app/src/app/home/home.component.ts). +For the full example of using events, please see our sample [here](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/samples/msal-angular-samples/angular-modules-sample/src/app/home/home.component.ts). ## Table of events @@ -115,7 +115,7 @@ export class AppComponent implements OnInit, OnDestroy { } ``` -An example of error handling can also be found on our [MSAL Angular B2C Sample App](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/samples/msal-angular-v3-samples/angular-b2c-sample-app/src/app/app.component.ts#L129). +An example of error handling can also be found on our [MSAL Angular B2C Sample](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/samples/msal-angular-samples/angular-b2c-sample/src/app/app.component.ts#L129). ## Syncing logged in state across tabs and windows @@ -159,7 +159,7 @@ export class AppComponent implements OnInit, OnDestroy { } ``` -A full example can also be found in our [samples](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/samples/msal-angular-v3-samples/angular15-sample-app/src/app/app.component.ts). +A full example can also be found in our [samples](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/samples/msal-angular-samples/angular-modules-sample/src/app/app.component.ts). ## The inProgress$ Observable @@ -167,7 +167,7 @@ The `inProgress$` observable is also handled by the `MsalBroadcastService`, and Note that the last / most recent `InteractionStatus` will also be available when subscribing to the `inProgress$` observable. -See the example below for its use. A full example can also be found in our [samples](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/samples/msal-angular-v3-samples/angular15-sample-app/src/app/home/home.component.ts#L29). A full list of interaction statuses can be found [here](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/src/utils/BrowserConstants.ts#L87). +See the example below for its use. A full example can also be found in our [samples](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/samples/msal-angular-samples/angular-modules-sample/src/app/home/home.component.ts#L29). A full list of interaction statuses can be found [here](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/src/utils/BrowserConstants.ts#L87). ```js import { Component, OnInit, Inject, OnDestroy } from '@angular/core'; @@ -273,4 +273,4 @@ import { PublicClientApplication, InteractionType, BrowserCacheLocation } from " bootstrap: [AppComponent, MsalRedirectComponent] }) export class AppModule {} -``` +``` \ No newline at end of file diff --git a/msal-javascript-conceptual/angular/initialization.md b/msal-javascript-conceptual/angular/initialization.md index a382e7c..f4d59cb 100644 --- a/msal-javascript-conceptual/angular/initialization.md +++ b/msal-javascript-conceptual/angular/initialization.md @@ -7,17 +7,25 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- -# Initializing MSAL Angular +# Initializing MSAL angular -Before using `@azure/msal-angular`, you must first [register your application in Microsoft Entra ID](/entra/identity-platform/quickstart-register-app) to get your client ID, a unique identifier for your application, also known as application ID. +Before using `@azure/msal-angular`, [register an application in Azure AD](https://docs.microsoft.com/azure/active-directory/develop/quickstart-register-app) to get the `clientId`. + +In this document: +- [Initialization of MSAL angular](#initialization-of-msal-angular) + - [Include and initialize the MSAL module in your app module](#include-and-initialize-the-msal-module-in-your-app-module) + - [Secure the routes in your application](#secure-the-routes-in-your-application) + - [Get tokens for Web API calls](#get-tokens-for-web-api-calls) + - [Subscribe to events](#subscribe-to-events) +- [Next steps](#next-steps) ## Include and initialize the MSAL module in your app module -Import `MsalModule` into app.module.ts. To initialize MSAL module you are required to pass the clientId of your application which you can get from the application registration. +Import `MsalModule` into app.module.ts. To initialize the MSAL module, pass the clientId of your application, which you get from the application registration. ```js import { NgModule } from '@angular/core'; @@ -36,7 +44,7 @@ import { PublicClientApplication, InteractionType, BrowserCacheLocation } from " }, cache: { cacheLocation : BrowserCacheLocation.LocalStorage, - storeAuthStateInCookie: true, // set to true for IE 11 + storeAuthStateInCookie: true, // Deprecated, removed in a future version }, system: { loggerOptions: { @@ -67,11 +75,11 @@ export class AppModule {} ## Secure the routes in your application -You can add authentication to secure specific routes in your application by just adding `canActivate: [MsalGuard]` to your route definition. It can be added at the parent or child routes. When a user visits these routes, the library will prompt the user to authenticate. +Add authentication to secure specific routes in your application by adding `canActivate: [MsalGuard]` to your route definition. Add it to parent or child routes. When a user visits these routes, the library prompts the user to authenticate. -See our [`MsalGuard` doc](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/msal-guard.md) for more details on configuration and considerations, including using additional interfaces. +Learn more in our [`MsalGuard` doc](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/msal-guard.md) about configuration and considerations, including using additional interfaces. -See this example of a route defined with the `MsalGuard`: +Here is an example of a route defined with the `MsalGuard`: ```js import { NgModule } from '@angular/core'; @@ -99,7 +107,7 @@ const routes: Routes = [ export class AppRoutingModule { } ``` -## Get tokens for Web API calls +## Get tokens for web API calls `@azure/msal-angular` allows you to add an Http interceptor (`MsalInterceptor`) in your `app.module.ts` as follows. The `MsalInterceptor` will obtain tokens and add them to all your Http requests in API calls based on the `protectedResourceMap`. See our [MsalInterceptor doc](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/msal-interceptor.md) for more details on configuration and use. @@ -120,7 +128,7 @@ import { PublicClientApplication, InteractionType, BrowserCacheLocation } from " }, cache: { cacheLocation : BrowserCacheLocation.LocalStorage, - storeAuthStateInCookie: true, // set to true for IE 11 + storeAuthStateInCookie: true, // Deprecated, will be removed in future version }, system: { loggerOptions: { @@ -154,13 +162,13 @@ import { PublicClientApplication, InteractionType, BrowserCacheLocation } from " export class AppModule {} ``` -Using the `MsalInterceptor` is optional. You may wish to explicitly acquire tokens using the acquireToken APIs instead. +Using the `MsalInterceptor` is optional. You might want to explicitly get tokens using the acquireToken APIs instead. -Please note that the `MsalInterceptor` is provided for your convenience and may not fit all use cases. We encourage you to write your own interceptor if you have specific needs that are not addressed by the `MsalInterceptor`. +Note that the `MsalInterceptor` is provided for your convenience and might not fit all use cases. Write your own interceptor if you have specific needs that aren't addressed by the `MsalInterceptor`. ## Subscribe to events -MSAL provides an event system, which emits events related to auth and MSAL, and can be subscribed to as below. To use events, the `MsalBroadcastService` should be added to your constructor in your component/service. +MSAL provides an event system that emits events related to authentication and MSAL. To use events, add the `MsalBroadcastService` to the constructor in your component or service. ### 1. How to subscribe to events @@ -179,11 +187,11 @@ this.msalBroadcastService.msalSubject$ ### 2. Available events -The list of events available to MSAL can be found in the [`@azure/msal-browser` event documentation.](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/events.md) +Find the list of events available to MSAL in the [`@azure/msal-browser` event documentation.](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/events.md) ### 3. Unsubscribing -It is extremely important to unsubscribe. Implement `ngOnDestroy()` in your component and unsubscribe. +Unsubscribing is important. Implement `ngOnDestroy()` in your component to unsubscribe. ```js import { EventMessage, EventType } from '@azure/msal-browser'; @@ -206,6 +214,6 @@ ngOnDestroy(): void { } ``` -## Next Steps +# Next steps -- Learn how to to use [public APIs](public-apis.md) in MSAL Angular. +You're ready to use `@azure/msal-angular` [public APIs](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/public-apis.md). \ No newline at end of file diff --git a/msal-javascript-conceptual/angular/logging.md b/msal-javascript-conceptual/angular/logging.md index 3cbf4b4..d0bb874 100644 --- a/msal-javascript-conceptual/angular/logging.md +++ b/msal-javascript-conceptual/angular/logging.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Logging in MSAL Angular diff --git a/msal-javascript-conceptual/angular/msal-guard.md b/msal-javascript-conceptual/angular/msal-guard.md index f6fb487..7d1161d 100644 --- a/msal-javascript-conceptual/angular/msal-guard.md +++ b/msal-javascript-conceptual/angular/msal-guard.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Using MSAL Guard to protect routes diff --git a/msal-javascript-conceptual/angular/msal-interceptor.md b/msal-javascript-conceptual/angular/msal-interceptor.md index e8c8df5..22fe851 100644 --- a/msal-javascript-conceptual/angular/msal-interceptor.md +++ b/msal-javascript-conceptual/angular/msal-interceptor.md @@ -1,4 +1,3 @@ ---- title: Using the MSAL Interceptor description: Learn how to use the MSAL Interceptor author: Dickson-Mwendia @@ -7,9 +6,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # MSAL Interceptor @@ -18,7 +17,7 @@ MSAL Angular provides an `Interceptor` class that automatically acquires tokens While we recommend using the `MsalInterceptor` instead of the `acquireTokenSilent` API directly, please note that using the `MsalInterceptor` is optional. You may wish to explicitly acquire tokens using the acquireToken APIs instead. -Please note that the `MsalInterceptor` is provided for your convenience and may not fit all use cases. We encourage you to write your own interceptor if you have specific needs that are not addressed by the `MsalInterceptor`. +Please note that the `MsalInterceptor` is provided for your convenience and may not fit all use cases. We encourage you to write your own interceptor if you have specific needs that are not addressed by the `MsalInterceptor`. ## Configuration @@ -26,7 +25,7 @@ Please note that the `MsalInterceptor` is provided for your convenience and may The `MsalInterceptor` can be added to your application as a provider in the *app.module.ts*, with its configuration. The imports takes in an instance of MSAL, as well as two Angular-specific configuration objects. The third argument is a [`MsalInterceptorConfiguration`](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/src/msal.interceptor.config.ts) object, which contain the values for `interactionType`, a `protectedResourceMap`, and an optional `authRequest`. -Your configuration may look like the below. See our [configuration doc](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/configuration.md) on other ways to configure MSAL Angular for your app. +Your configuration may look like the below. See our [configuration doc](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/configuration.md) on other ways to configure MSAL Angular for your app. ```javascript import { NgModule } from '@angular/core'; @@ -80,7 +79,7 @@ While the `MsalInterceptor` is designed to acquire tokens silently, in the event ### Protected Resource Map -The protected resources and corresponding scopes are provided as a `protectedResourceMap` in the `MsalInterceptor` configuration. +The protected resources and corresponding scopes are provided as a `protectedResourceMap` in the `MsalInterceptor` configuration. The URLs you provide in the `protectedResourceMap` collection are case-sensitive. For each resource, add scopes being requested to be returned in the access token. @@ -89,76 +88,75 @@ For example: * `["user.read"]` for Microsoft Graph * `["/scope"]` for custom web APIs (that is, `api:///access_as_user`) - Scopes can be specified for a resource in the following ways: 1. An array of scopes, which will be added to every HTTP request to that resource, regardless of HTTP method. - ```javascript - { - interactionType: InteractionType.Redirect, - protectedResourceMap: new Map | null>([ - ["https://graph.microsoft.com/v1.0/me", ["user.read", "profile"]], - ["https://myapplication.com/user/*", ["customscope.read"]] - ]), - } - ``` - -1. An array of `ProtectedResourceScopes`, which will attach scopes only for specific HTTP methods. - - ```javascript - { - interactionType: InteractionType.Redirect, - protectedResourceMap: new Map | null>([ - ["https://graph.microsoft.com/v1.0/me", ["user.read"]], - ["http://myapplication.com", [ - { - httpMethod: "POST", - scopes: ["write.scope"] - } - ]] - ]) - } - ``` - - Note that scopes for a resource can contain a combination of strings and `ProtectedResourceScopes`. In the below example, a `GET` request will have the scopes `"all.scope"` and `"read.scope"`, whereas as `PUT` request would just have `"all.scope"`. - - ```javascript - { - interactionType: InteractionType.Redirect, - protectedResourceMap: new Map | null>([ - ["http://myapplication.com", [ - "all.scope", - { - httpMethod: "GET", - scopes: ["read.scope"] - }, - { - httpMethod: "POST", - scopes: ["info.scope"] - } - ]] - ]) - } - ``` +```javascript +{ + interactionType: InteractionType.Redirect, + protectedResourceMap: new Map | null>([ + ["https://graph.microsoft.com/v1.0/me", ["user.read", "profile"]], + ["https://myapplication.com/user/*", ["customscope.read"]] + ]), +} +``` + +1. An array of `ProtectedResourceScopes`, which will attach scopes only for specific HTTP methods. + +```javascript +{ + interactionType: InteractionType.Redirect, + protectedResourceMap: new Map | null>([ + ["https://graph.microsoft.com/v1.0/me", ["user.read"]], + ["http://myapplication.com", [ + { + httpMethod: "POST", + scopes: ["write.scope"] + } + ]] + ]) +} +``` + +Note that scopes for a resource can contain a combination of strings and `ProtectedResourceScopes`. In the below example, a `GET` request will have the scopes `"all.scope"` and `"read.scope"`, whereas as `PUT` request would just have `"all.scope"`. + +```javascript +{ + interactionType: InteractionType.Redirect, + protectedResourceMap: new Map | null>([ + ["http://myapplication.com", [ + "all.scope", + { + httpMethod: "GET", + scopes: ["read.scope"] + }, + { + httpMethod: "POST", + scopes: ["info.scope"] + } + ]] + ]) +} +``` 1. A scope value of `null`, indicating that a resource is to be unprotected and will not get tokens. Resources not included in the `protectedResourceMap` are not protected by default. Specifying a particular resource to be unprotected can be useful when some routes on a resource are to be protected, and some are not. Note that the order in `protectedResourceMap` matters, so null resource should be put before any similar base urls or wildcards. - ```javascript - { - interactionType: InteractionType.Redirect, - protectedResourceMap: new Map | null>([ - ["https://graph.microsoft.com/v1.0/me", ["user.read", "profile"]], - ["https://myapplication.com/unprotected", null], - ["https://myapplication.com/unprotected/post", [{ httpMethod: 'POST', scopes: null }]], - ["https://myapplication.com", ["custom.scope"]] - ]), - } - ``` +```javascript +{ + interactionType: InteractionType.Redirect, + protectedResourceMap: new Map | null>([ + ["https://graph.microsoft.com/v1.0/me", ["user.read", "profile"]], + ["https://myapplication.com/unprotected", null], + ["https://myapplication.com/unprotected/post", [{ httpMethod: 'POST', scopes: null }]], + ["https://myapplication.com", ["custom.scope"]] + ]), +} +``` Other things to note regarding the `protectedResourceMap`: -* **Wildcards**: `protectedResourceMap` supports using `*` for wildcards. When using wildcards, if multiple matching entries are found in the `protectedResourceMap`, the first match found will be used (based on the order of the `protectedResourceMap`). +* **Wildcards**: `protectedResourceMap` supports using `*` for wildcards. When using wildcards, if multiple matching entries are found in the `protectedResourceMap`, the first match found will be used (based on the order of the `protectedResourceMap`). * **Relative paths**: If there are relative resource paths in your application, you may need to provide the relative path in the `protectedResourceMap`. This also applies to issues that may arise with ngx-translate. Be aware that the relative path in your `protectedResourceMap` may or may not need a leading slash depending on your app, and may need to try both. ### Optional authRequest @@ -167,8 +165,10 @@ For more information on the optional `authRequest` that can be set in the `MsalI ## Changes from msal-angular v1 to v2 -* Note that the `unprotectedResourceMap` in MSAL Angular v1's `MsalAngularConfiguration` has been deprecated and no longer works. +> [!NOTE] +> The `unprotectedResourceMap` in MSAL Angular v1's `MsalAngularConfiguration` has been deprecated and no longer works. + * `protectedResourceMap` has been moved to the `MsalInterceptorConfiguration` object, and can be passed as `Map>`. `MsalAngularConfiguration` has been deprecated and no longer works. * Putting the root domain in the `protectedResourceMap` to protect all routes is no longer supported. Please use wildcard matching instead. -For more information on how to configure scopes, please see our [FAQs](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/FAQ.md). +For more information on how to configure scopes, please see our [FAQs](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/FAQ.md). \ No newline at end of file diff --git a/msal-javascript-conceptual/angular/multi-tenant.md b/msal-javascript-conceptual/angular/multi-tenant.md index 0660a71..21b4532 100644 --- a/msal-javascript-conceptual/angular/multi-tenant.md +++ b/msal-javascript-conceptual/angular/multi-tenant.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Multi-Tenant diff --git a/msal-javascript-conceptual/angular/performance.md b/msal-javascript-conceptual/angular/performance.md index b0020d6..2296215 100644 --- a/msal-javascript-conceptual/angular/performance.md +++ b/msal-javascript-conceptual/angular/performance.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # How to configure `@azure/msal-angular` to use your router's navigate function for client-side navigation diff --git a/msal-javascript-conceptual/angular/public-apis.md b/msal-javascript-conceptual/angular/public-apis.md index 45ff37f..4ad6bba 100644 --- a/msal-javascript-conceptual/angular/public-apis.md +++ b/msal-javascript-conceptual/angular/public-apis.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Commonly used public APIs in MSAL Angular diff --git a/msal-javascript-conceptual/angular/redirects.md b/msal-javascript-conceptual/angular/redirects.md index 92ab3bc..fbad815 100644 --- a/msal-javascript-conceptual/angular/redirects.md +++ b/msal-javascript-conceptual/angular/redirects.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Using redirects in MSAL Angular diff --git a/msal-javascript-conceptual/angular/ssosilent.md b/msal-javascript-conceptual/angular/ssosilent.md index 0da5c8a..b1b5131 100644 --- a/msal-javascript-conceptual/angular/ssosilent.md +++ b/msal-javascript-conceptual/angular/ssosilent.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Silent login with ssoSilent() diff --git a/msal-javascript-conceptual/angular/universal-ssr.md b/msal-javascript-conceptual/angular/universal-ssr.md index 1bc71e2..4dd572a 100644 --- a/msal-javascript-conceptual/angular/universal-ssr.md +++ b/msal-javascript-conceptual/angular/universal-ssr.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Angular Universal SSR with MSAL Angular diff --git a/msal-javascript-conceptual/angular/v0-v1-upgrade-guide.md b/msal-javascript-conceptual/angular/v0-v1-upgrade-guide.md index 3687df6..fe4887e 100644 --- a/msal-javascript-conceptual/angular/v0-v1-upgrade-guide.md +++ b/msal-javascript-conceptual/angular/v0-v1-upgrade-guide.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Migrating from MSAL Angular v0 to v1 diff --git a/msal-javascript-conceptual/angular/v1-v2-upgrade-guide.md b/msal-javascript-conceptual/angular/v1-v2-upgrade-guide.md index 90f2a26..c45546a 100644 --- a/msal-javascript-conceptual/angular/v1-v2-upgrade-guide.md +++ b/msal-javascript-conceptual/angular/v1-v2-upgrade-guide.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Upgrading from MSAL Angular v1 to v2 diff --git a/msal-javascript-conceptual/angular/v2-v3-upgrade-guide.md b/msal-javascript-conceptual/angular/v2-v3-upgrade-guide.md index 158ee4c..7d6d6c9 100644 --- a/msal-javascript-conceptual/angular/v2-v3-upgrade-guide.md +++ b/msal-javascript-conceptual/angular/v2-v3-upgrade-guide.md @@ -7,9 +7,9 @@ manager: CelesteDG ms.service: msal ms.subservice: msal-angular ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Upgrading from MSAL Angular v2 to v3 diff --git a/msal-javascript-conceptual/browser/MIP-logging.md b/msal-javascript-conceptual/browser/MIP-logging.md index 9d20846..908958c 100644 --- a/msal-javascript-conceptual/browser/MIP-logging.md +++ b/msal-javascript-conceptual/browser/MIP-logging.md @@ -5,7 +5,7 @@ author: Dickson-Mwendia manager: CelesteDG ms.author: dmwendia ms.custom: devx-track-js -ms.date: 12/21/2023 +ms.date: 05/21/2025 ms.reviewer: saeeda, jmprieur ms.service: msal ms.subservice: msal-js diff --git a/msal-javascript-conceptual/browser/about-msal-browser.md b/msal-javascript-conceptual/browser/about-msal-browser.md index d6857c9..fbf4eea 100644 --- a/msal-javascript-conceptual/browser/about-msal-browser.md +++ b/msal-javascript-conceptual/browser/about-msal-browser.md @@ -1,15 +1,15 @@ --- title: About MSAL Browser description: Learn how to use MSAL Browser in your JavaScript applications -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- diff --git a/msal-javascript-conceptual/browser/access-token-proof-of-possession.md b/msal-javascript-conceptual/browser/access-token-proof-of-possession.md index 813de45..0259eda 100644 --- a/msal-javascript-conceptual/browser/access-token-proof-of-possession.md +++ b/msal-javascript-conceptual/browser/access-token-proof-of-possession.md @@ -1,15 +1,15 @@ --- title: Acquiring access tokens protected with Proof-of-Possession description: Learn how to acquire access tokens protected with Proof-of-Possession -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Acquiring access tokens protected with Proof-of-Possession diff --git a/msal-javascript-conceptual/browser/accounts.md b/msal-javascript-conceptual/browser/accounts.md index 9e58b70..9b756e0 100644 --- a/msal-javascript-conceptual/browser/accounts.md +++ b/msal-javascript-conceptual/browser/accounts.md @@ -1,15 +1,15 @@ --- title: Accounts in MSAL Browser description: Learn about accounts in MSAL Browser -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Accounts in MSAL Browser diff --git a/msal-javascript-conceptual/browser/acquire-token.md b/msal-javascript-conceptual/browser/acquire-token.md index ab29916..87ef7eb 100644 --- a/msal-javascript-conceptual/browser/acquire-token.md +++ b/msal-javascript-conceptual/browser/acquire-token.md @@ -1,15 +1,15 @@ --- title: Acquiring and using an access token description: Learn how to acquire and use an access token -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Acquiring and using an access token diff --git a/msal-javascript-conceptual/browser/caching.md b/msal-javascript-conceptual/browser/caching.md index 84e7543..bdb15b4 100644 --- a/msal-javascript-conceptual/browser/caching.md +++ b/msal-javascript-conceptual/browser/caching.md @@ -1,15 +1,15 @@ --- title: Caching in MSAL.js description: Learn about caching tokens in MSAL.js -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Caching in MSAL.js diff --git a/msal-javascript-conceptual/browser/cdn-usage.md b/msal-javascript-conceptual/browser/cdn-usage.md index b00e516..afba3ff 100644 --- a/msal-javascript-conceptual/browser/cdn-usage.md +++ b/msal-javascript-conceptual/browser/cdn-usage.md @@ -1,15 +1,15 @@ --- title: CDN Usage for MSAL Browser description: Learn about CDN Usage for @azure/msal-browser -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # CDN Usage for MSAL Browser diff --git a/msal-javascript-conceptual/browser/configuration.md b/msal-javascript-conceptual/browser/configuration.md index c5cef7b..c6d08db 100644 --- a/msal-javascript-conceptual/browser/configuration.md +++ b/msal-javascript-conceptual/browser/configuration.md @@ -1,15 +1,15 @@ --- title: Authentication configuration options description: Learn about configuration options that can be used to customize the behavior of your authentication flows -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Authentication configuration options diff --git a/msal-javascript-conceptual/browser/device-bound-tokens.md b/msal-javascript-conceptual/browser/device-bound-tokens.md index 554573e..c3e9c32 100644 --- a/msal-javascript-conceptual/browser/device-bound-tokens.md +++ b/msal-javascript-conceptual/browser/device-bound-tokens.md @@ -1,15 +1,15 @@ --- title: Acquiring Device Bound Tokens using Web Account Manager (WAM) on Windows description: Learn how to acquire Device Bound Tokens using Web Account Manager (WAM) on Windows -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Acquiring Device Bound Tokens using Web Account Manager (WAM) on Windows diff --git a/msal-javascript-conceptual/browser/errors.md b/msal-javascript-conceptual/browser/errors.md index 3a036bf..a776a2c 100644 --- a/msal-javascript-conceptual/browser/errors.md +++ b/msal-javascript-conceptual/browser/errors.md @@ -1,15 +1,15 @@ --- title: Common errors in MSAL JS description: Learn the common errors in MSAL JS -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Errors diff --git a/msal-javascript-conceptual/browser/events.md b/msal-javascript-conceptual/browser/events.md index f0f3ea5..531a71f 100644 --- a/msal-javascript-conceptual/browser/events.md +++ b/msal-javascript-conceptual/browser/events.md @@ -1,15 +1,15 @@ --- title: Events in MSAL Browser description: Learn about events in MSAL Browser -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Events diff --git a/msal-javascript-conceptual/browser/handle-errors-and-exceptions.md b/msal-javascript-conceptual/browser/handle-errors-and-exceptions.md index 82bbaaa..982ad72 100644 --- a/msal-javascript-conceptual/browser/handle-errors-and-exceptions.md +++ b/msal-javascript-conceptual/browser/handle-errors-and-exceptions.md @@ -4,7 +4,7 @@ description: Learn how to handle errors and exceptions, Conditional Access claim author: Dickson-Mwendia manager: CelesteDG ms.author: dmwendia -ms.date: 11/26/2023 +ms.date: 05/21/2025 ms.reviewer: saeeda, hahamil ms.service: msal ms.subservice: msal-js diff --git a/msal-javascript-conceptual/browser/iframe-usage.md b/msal-javascript-conceptual/browser/iframe-usage.md index 0b0e7be..7aaa3f7 100644 --- a/msal-javascript-conceptual/browser/iframe-usage.md +++ b/msal-javascript-conceptual/browser/iframe-usage.md @@ -1,15 +1,15 @@ --- title: Using MSAL in iframed apps description: Learn how to use MSAL in iframed apps -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Using MSAL in iframed apps diff --git a/msal-javascript-conceptual/browser/initialization.md b/msal-javascript-conceptual/browser/initialization.md index f1a0fc9..d0dab46 100644 --- a/msal-javascript-conceptual/browser/initialization.md +++ b/msal-javascript-conceptual/browser/initialization.md @@ -1,15 +1,15 @@ --- title: Initialize MSAL Browser description: Learn how to initialize MSAL in your JavaScript applications -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Initialization of MSAL diff --git a/msal-javascript-conceptual/browser/instance-aware.md b/msal-javascript-conceptual/browser/instance-aware.md index 573c7aa..7e2e11b 100644 --- a/msal-javascript-conceptual/browser/instance-aware.md +++ b/msal-javascript-conceptual/browser/instance-aware.md @@ -1,15 +1,15 @@ --- title: Instance aware flow description: Learn how to use the instance aware flow -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Instance Aware flow diff --git a/msal-javascript-conceptual/browser/logging.md b/msal-javascript-conceptual/browser/logging.md index 2ae00a0..8129efc 100644 --- a/msal-javascript-conceptual/browser/logging.md +++ b/msal-javascript-conceptual/browser/logging.md @@ -1,15 +1,15 @@ --- title: Enable logging in your applications description: Learn how to enable MSAL JS logging for your applications -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Enable logging in your applications diff --git a/msal-javascript-conceptual/browser/login-user.md b/msal-javascript-conceptual/browser/login-user.md index 1c19dcb..4cd89ab 100644 --- a/msal-javascript-conceptual/browser/login-user.md +++ b/msal-javascript-conceptual/browser/login-user.md @@ -1,15 +1,15 @@ --- title: Sign in users description: Learn how to sign in users -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Sign in users diff --git a/msal-javascript-conceptual/browser/logout.md b/msal-javascript-conceptual/browser/logout.md index 2d04dc1..e333feb 100644 --- a/msal-javascript-conceptual/browser/logout.md +++ b/msal-javascript-conceptual/browser/logout.md @@ -1,15 +1,15 @@ --- title: Sign out users description: Learn how to sign out users -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Signing out users diff --git a/msal-javascript-conceptual/browser/navigation.md b/msal-javascript-conceptual/browser/navigation.md index 75abda7..26ea417 100644 --- a/msal-javascript-conceptual/browser/navigation.md +++ b/msal-javascript-conceptual/browser/navigation.md @@ -1,15 +1,15 @@ --- title: Intercepting or overriding window navigation description: Learn how to intercept or override window navigation -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Intercepting or overriding window navigation diff --git a/msal-javascript-conceptual/browser/performance.md b/msal-javascript-conceptual/browser/performance.md index 516b3f6..79a97e8 100644 --- a/msal-javascript-conceptual/browser/performance.md +++ b/msal-javascript-conceptual/browser/performance.md @@ -1,15 +1,15 @@ --- title: Measuring performance in MSAL.js description: Learn more about telemetry and performance of token acquisition in MSAL.js -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Measuring performance diff --git a/msal-javascript-conceptual/browser/request-response-object.md b/msal-javascript-conceptual/browser/request-response-object.md index 212ac25..fa71f32 100644 --- a/msal-javascript-conceptual/browser/request-response-object.md +++ b/msal-javascript-conceptual/browser/request-response-object.md @@ -1,15 +1,15 @@ --- title: Request and Response Objects description: Learn about the configuration options you can use to customize authentication flows -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: reference -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Request and Response Objects diff --git a/msal-javascript-conceptual/browser/resources-and-scopes.md b/msal-javascript-conceptual/browser/resources-and-scopes.md index 8d6e498..8ee34ab 100644 --- a/msal-javascript-conceptual/browser/resources-and-scopes.md +++ b/msal-javascript-conceptual/browser/resources-and-scopes.md @@ -1,15 +1,15 @@ --- title: Resources and Scopes description: Learn about accessing resources and the scopes included in token requests -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Resources and scopes diff --git a/msal-javascript-conceptual/browser/shr-client-claims.md b/msal-javascript-conceptual/browser/shr-client-claims.md index c27dab9..52c0443 100644 --- a/msal-javascript-conceptual/browser/shr-client-claims.md +++ b/msal-javascript-conceptual/browser/shr-client-claims.md @@ -1,15 +1,15 @@ --- title: Custom Signed HTTP Request Claims description: Learn how to use Signed HTTP Request claims -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Custom SHR Claims diff --git a/msal-javascript-conceptual/browser/shr-server-nonce.md b/msal-javascript-conceptual/browser/shr-server-nonce.md index 6af8200..cbfcc8c 100644 --- a/msal-javascript-conceptual/browser/shr-server-nonce.md +++ b/msal-javascript-conceptual/browser/shr-server-nonce.md @@ -1,15 +1,15 @@ --- title: SHR Server Nonce description: Learn about the SHR Server Nonce -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # SHR Server Nonce diff --git a/msal-javascript-conceptual/browser/signed-http-request.md b/msal-javascript-conceptual/browser/signed-http-request.md index a65c0ad..e36c2c6 100644 --- a/msal-javascript-conceptual/browser/signed-http-request.md +++ b/msal-javascript-conceptual/browser/signed-http-request.md @@ -1,15 +1,15 @@ --- title: Signed Http Request description: Learn how to use signed Http requests -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Signed Http Request diff --git a/msal-javascript-conceptual/browser/single-sign-on.md b/msal-javascript-conceptual/browser/single-sign-on.md index 42ac8a1..4f03531 100644 --- a/msal-javascript-conceptual/browser/single-sign-on.md +++ b/msal-javascript-conceptual/browser/single-sign-on.md @@ -5,7 +5,7 @@ author: OwenRichards1 manager: CelesteDG ms.author: owenrichards ms.custom: has-adal-ref, devx-track-js -ms.date: 10/16/2023 +ms.date: 05/21/2025 ms.reviewer: saeeda ms.service: msal ms.subservice: msal-js diff --git a/msal-javascript-conceptual/browser/ssh-certificates.md b/msal-javascript-conceptual/browser/ssh-certificates.md index feb6b5d..9803124 100644 --- a/msal-javascript-conceptual/browser/ssh-certificates.md +++ b/msal-javascript-conceptual/browser/ssh-certificates.md @@ -1,15 +1,15 @@ --- title: SSH Certificates description: Learn how to acquire and use SSH Certificates -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Ephemeral SSH Certificates diff --git a/msal-javascript-conceptual/browser/testing.md b/msal-javascript-conceptual/browser/testing.md index 8f07482..47a9206 100644 --- a/msal-javascript-conceptual/browser/testing.md +++ b/msal-javascript-conceptual/browser/testing.md @@ -1,15 +1,15 @@ --- title: Testing your application in a browser environment description: Learn how to test your application in a browser environment -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Testing diff --git a/msal-javascript-conceptual/browser/token-lifetimes.md b/msal-javascript-conceptual/browser/token-lifetimes.md index a25e5f2..e74cb8a 100644 --- a/msal-javascript-conceptual/browser/token-lifetimes.md +++ b/msal-javascript-conceptual/browser/token-lifetimes.md @@ -1,15 +1,15 @@ --- title: Manage token lifetimes description: Learn how to manage token lifetimes -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Token Lifetimes, Expiration, and Renewal diff --git a/msal-javascript-conceptual/browser/v1-migration.md b/msal-javascript-conceptual/browser/v1-migration.md index 0c237ab..9b29299 100644 --- a/msal-javascript-conceptual/browser/v1-migration.md +++ b/msal-javascript-conceptual/browser/v1-migration.md @@ -1,15 +1,15 @@ --- title: Migrating from MSAL v1.x to MSAL v2.x description: Learn how to migrate from MSAL v1.x to MSAL v2.x -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Migrating from MSAL v1.x to MSAL v2.x diff --git a/msal-javascript-conceptual/browser/v2-migration.md b/msal-javascript-conceptual/browser/v2-migration.md index 7c711bb..678a594 100644 --- a/msal-javascript-conceptual/browser/v2-migration.md +++ b/msal-javascript-conceptual/browser/v2-migration.md @@ -1,15 +1,15 @@ --- title: Migrating from MSAL v2.x to MSAL v3.x description: Learn how to migrate from MSAL v2.x to MSAL v3.x -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 01/10/2024 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Migrating from MSAL v2.x to MSAL v3.x diff --git a/msal-javascript-conceptual/browser/working-with-b2c.md b/msal-javascript-conceptual/browser/working-with-b2c.md index 02124da..31f60eb 100644 --- a/msal-javascript-conceptual/browser/working-with-b2c.md +++ b/msal-javascript-conceptual/browser/working-with-b2c.md @@ -1,14 +1,14 @@ --- title: Use the Microsoft Authentication Library for JavaScript to work with Azure AD B2C description: The Microsoft Authentication Library for JavaScript (MSAL.js) enables applications to work with Azure AD B2C and acquire tokens to call secured web APIs. These web APIs can be Microsoft Graph, other Microsoft APIs, web APIs from others, or your own web API. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia ms.service: msal ms.subservice: msal-js ms.topic: conceptual -ms.date: 11/30/2023 +ms.date: 05/21/2025 ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus #Customer intent: As an application developer, I want to learn how MSAL.js can be used with Azure AD B2C for authentication and authorization in my organization's web apps and web APIs that my customers log in to and use. --- diff --git a/msal-javascript-conceptual/index.md b/msal-javascript-conceptual/index.md index c7c99c2..23ae72d 100644 --- a/msal-javascript-conceptual/index.md +++ b/msal-javascript-conceptual/index.md @@ -6,7 +6,7 @@ author: Dickson-Mwendia manager: CelesteDG ms.topic: reference -ms.date: 11/29/2023 +ms.date: 05/21/2025 ms.author: dmwendia ms.reviewer: emilylauber --- diff --git a/msal-javascript-conceptual/node/accounts.md b/msal-javascript-conceptual/node/accounts.md index f14ff08..3abfc8f 100644 --- a/msal-javascript-conceptual/node/accounts.md +++ b/msal-javascript-conceptual/node/accounts.md @@ -1,9 +1,9 @@ --- title: Accounts in MSAL Node description: Learn how to use the different APIs in MSAL Node to access cached accounts. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia ms.service: msal ms.subservice: msal-node diff --git a/msal-javascript-conceptual/node/brokering.md b/msal-javascript-conceptual/node/brokering.md index 696e962..41ff5e0 100644 --- a/msal-javascript-conceptual/node/brokering.md +++ b/msal-javascript-conceptual/node/brokering.md @@ -1,9 +1,9 @@ --- title: "Acquiring Device Bound Tokens" description: Learn how to acquire device bound tokens from the native token broker. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia ms.service: msal ms.subservice: msal-node diff --git a/msal-javascript-conceptual/node/caching.md b/msal-javascript-conceptual/node/caching.md index a85d522..5405fc1 100644 --- a/msal-javascript-conceptual/node/caching.md +++ b/msal-javascript-conceptual/node/caching.md @@ -1,11 +1,11 @@ --- title: Token caching in MSAL Node description: Learn how to effectively cache tokens in MSAL Node, and use client secrets securely, -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: conceptual diff --git a/msal-javascript-conceptual/node/certificate-credentials.md b/msal-javascript-conceptual/node/certificate-credentials.md index c2411ef..2dc2ed9 100644 --- a/msal-javascript-conceptual/node/certificate-credentials.md +++ b/msal-javascript-conceptual/node/certificate-credentials.md @@ -1,11 +1,11 @@ --- title: Using certificate credentials with MSAL Node description: Learn how to use certificate credentials with MSAL Node. Create, register and initialize certificates, and use them securely. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: conceptual diff --git a/msal-javascript-conceptual/node/configuration.md b/msal-javascript-conceptual/node/configuration.md index 9ecc366..31bfe90 100644 --- a/msal-javascript-conceptual/node/configuration.md +++ b/msal-javascript-conceptual/node/configuration.md @@ -1,11 +1,11 @@ --- title: Configure MSAL Node description: Learn how to configure MSAL Node. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: conceptual diff --git a/msal-javascript-conceptual/node/extensions.md b/msal-javascript-conceptual/node/extensions.md index b7e0e27..95d373c 100644 --- a/msal-javascript-conceptual/node/extensions.md +++ b/msal-javascript-conceptual/node/extensions.md @@ -1,11 +1,11 @@ --- title: Microsoft Authentication Extensions for Node description: Learn how to use the Microsoft Authentication Extensions for Node to perform cross-platform token cache serialization and persistence. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: conceptual diff --git a/msal-javascript-conceptual/node/faq.md b/msal-javascript-conceptual/node/faq.md index 7b8f472..1ee0f3a 100644 --- a/msal-javascript-conceptual/node/faq.md +++ b/msal-javascript-conceptual/node/faq.md @@ -1,11 +1,11 @@ --- title: Frequently asked questions about MSAL Node description: Learn about the most frequently asked questions about MSAL Node. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: faq diff --git a/msal-javascript-conceptual/node/initialize-confidential-client-application.md b/msal-javascript-conceptual/node/initialize-confidential-client-application.md index 88c640c..474d9c2 100644 --- a/msal-javascript-conceptual/node/initialize-confidential-client-application.md +++ b/msal-javascript-conceptual/node/initialize-confidential-client-application.md @@ -1,11 +1,11 @@ --- title: How to initialize the confidential client application object in MSAL Node description: Learn how to initialize MSAL Node. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: how-to diff --git a/msal-javascript-conceptual/node/initialize-public-client-application.md b/msal-javascript-conceptual/node/initialize-public-client-application.md index 3d95f46..3c105c9 100644 --- a/msal-javascript-conceptual/node/initialize-public-client-application.md +++ b/msal-javascript-conceptual/node/initialize-public-client-application.md @@ -1,11 +1,11 @@ --- title: Initialize the public client application object in MSAL Node description: Learn how to initialize the PublicClientApplication object in MSAL Node and how to configure the authority. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: how-to diff --git a/msal-javascript-conceptual/node/key-vault-managed-identity.md b/msal-javascript-conceptual/node/key-vault-managed-identity.md index bb73e65..5ab116d 100644 --- a/msal-javascript-conceptual/node/key-vault-managed-identity.md +++ b/msal-javascript-conceptual/node/key-vault-managed-identity.md @@ -1,11 +1,11 @@ --- title: Securing MSAL Node app credentials with Azure Key Vault and Azure Managed Identity description: Learn how to secure MSAL Node app credentials with Azure Key Vault and Azure Managed Identity. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: conceptual diff --git a/msal-javascript-conceptual/node/migration.md b/msal-javascript-conceptual/node/migration.md index e372b3b..bfd89dc 100644 --- a/msal-javascript-conceptual/node/migration.md +++ b/msal-javascript-conceptual/node/migration.md @@ -1,11 +1,11 @@ --- title: "Migrate your Node.js application from ADAL to MSAL" description: How to update your existing Node.js application to use the Microsoft Authentication Library (MSAL) for authentication and authorization instead of the Active Directory Authentication Library (ADAL). -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.author: cwerner -ms.custom: has-adal-ref, devx-track-js -ms.date: 11/28/2023 + +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: how-to diff --git a/msal-javascript-conceptual/node/performance.md b/msal-javascript-conceptual/node/performance.md index 706ebcd..4e380b4 100644 --- a/msal-javascript-conceptual/node/performance.md +++ b/msal-javascript-conceptual/node/performance.md @@ -1,11 +1,11 @@ --- title: Performance in MSAL Node description: Learn how to measure performance in MSAL Node. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: conceptual diff --git a/msal-javascript-conceptual/node/regional-authorities.md b/msal-javascript-conceptual/node/regional-authorities.md index 1d8afad..5730d23 100644 --- a/msal-javascript-conceptual/node/regional-authorities.md +++ b/msal-javascript-conceptual/node/regional-authorities.md @@ -1,11 +1,11 @@ --- title: Enabling regional authorities description: Learn how to enable regional authorities in MSAL Node. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: conceptual diff --git a/msal-javascript-conceptual/node/request.md b/msal-javascript-conceptual/node/request.md index e4e094d..2904eee 100644 --- a/msal-javascript-conceptual/node/request.md +++ b/msal-javascript-conceptual/node/request.md @@ -1,11 +1,11 @@ --- title: "Acquiring tokens in MSAL Node" description: Learn how to acquire tokens in MSAL Node using the different OAuth 2.0 flows. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: conceptual diff --git a/msal-javascript-conceptual/node/sni.md b/msal-javascript-conceptual/node/sni.md index a99c40b..3c96a6b 100644 --- a/msal-javascript-conceptual/node/sni.md +++ b/msal-javascript-conceptual/node/sni.md @@ -1,11 +1,11 @@ --- title: Implement SNI Authentication with MSAL Node description: Learn how to acquire tokens from the native token broker. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG -ms.author: emilylauber +ms.author: dmwendia -ms.date: 11/28/2023 +ms.date: 05/21/2025 ms.service: msal ms.subservice: msal-node ms.topic: conceptual diff --git a/msal-javascript-conceptual/react/class-components.md b/msal-javascript-conceptual/react/class-components.md index f10bffb..bdc81a9 100644 --- a/msal-javascript-conceptual/react/class-components.md +++ b/msal-javascript-conceptual/react/class-components.md @@ -1,15 +1,15 @@ --- title: Using MSAL React with class components description: Learn how to use MSAL React with class components, covering initialization, protecting components, accessing MSAL React context and logging in. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-react ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Using MSAL React with class components diff --git a/msal-javascript-conceptual/react/errors.md b/msal-javascript-conceptual/react/errors.md index 21b3efa..fe4869a 100644 --- a/msal-javascript-conceptual/react/errors.md +++ b/msal-javascript-conceptual/react/errors.md @@ -1,15 +1,15 @@ --- title: Handle errors and exceptions in MSAL Node description: Learn how to handle use MSAL React with class components. covering initialization, protecting components, accessing MSAL React context and logging in. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-react ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Handle errors and exceptions in MSAL Node diff --git a/msal-javascript-conceptual/react/events.md b/msal-javascript-conceptual/react/events.md index af3d25b..4736e5c 100644 --- a/msal-javascript-conceptual/react/events.md +++ b/msal-javascript-conceptual/react/events.md @@ -1,15 +1,15 @@ --- title: Event callbacks in MSAL React description: Learn how to utilize MSAL React event callbacks to manage login responses and handle specific errors. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-react ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Event callbacks in MSAL React diff --git a/msal-javascript-conceptual/react/faq.md b/msal-javascript-conceptual/react/faq.md index dda17dc..bb563f8 100644 --- a/msal-javascript-conceptual/react/faq.md +++ b/msal-javascript-conceptual/react/faq.md @@ -1,15 +1,15 @@ --- title: MSAL React frequently asked questions description: Frequently asked questions on MSAL React -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-react ms.topic: faq -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # MSAL React FAQ diff --git a/msal-javascript-conceptual/react/getting-started.md b/msal-javascript-conceptual/react/getting-started.md index 949c43f..8a4deb3 100644 --- a/msal-javascript-conceptual/react/getting-started.md +++ b/msal-javascript-conceptual/react/getting-started.md @@ -1,15 +1,15 @@ --- title: Get started with MSAL React description: Get started with MSAL React. Learn how to initialize MSAL React, determine whether a user is authenticated, protect components, sign a user in and acquire an access token. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-react ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Get started with MSAL React diff --git a/msal-javascript-conceptual/react/hooks.md b/msal-javascript-conceptual/react/hooks.md index 8028467..9e6ffc3 100644 --- a/msal-javascript-conceptual/react/hooks.md +++ b/msal-javascript-conceptual/react/hooks.md @@ -1,15 +1,15 @@ --- title: Hooks in MSAL React description: Learn how to use MSAL React hooks to manage authentication state and perform authentication and authorization flows. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-react ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Hooks in MSAL React diff --git a/msal-javascript-conceptual/react/migration-guide.md b/msal-javascript-conceptual/react/migration-guide.md index 4867c19..28130ea 100644 --- a/msal-javascript-conceptual/react/migration-guide.md +++ b/msal-javascript-conceptual/react/migration-guide.md @@ -1,15 +1,15 @@ --- title: Migration Guide from MSAL v1 to MSAL React and MSAL Browser description: Learn how to migrate from msal.js v1 to MSAL React and MSAL Browser. This guide covers updating your app registration, installation, initialization, protecting components, acquiring an access token, acquiring an id token, updating redux store integration and reacting to events. -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-react ms.topic: how-to -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia, cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Migration Guide from MSAL v1 to `@azure/msal-react` and `@azure/msal-browser` diff --git a/msal-javascript-conceptual/react/performance.md b/msal-javascript-conceptual/react/performance.md index 7b255c8..6a5df96 100644 --- a/msal-javascript-conceptual/react/performance.md +++ b/msal-javascript-conceptual/react/performance.md @@ -1,15 +1,15 @@ --- title: Performance in MSAL React description: Learn how to configure @azure/msal-react to use your router's navigate function for client-side navigation -author: EmLauber +author: Dickson-Mwendia manager: CelesteDG ms.service: msal ms.subservice: msal-react ms.topic: conceptual -ms.date: 11/29/2023 -ms.author: emilylauber -ms.reviewer: dmwendia,cwerner, owenrichards, kengaderdus +ms.date: 05/21/2025 +ms.author: dmwendia +ms.reviewer: cwerner, owenrichards, kengaderdus --- # Performance in MSAL React