Inizializzare le applicazioni client usando MSAL.js
Questo articolo descrive l'inizializzazione di Microsoft Authentication Library per JavaScript (MSAL.js) con un'istanza di un'applicazione agente utente.
L'applicazione agente utente è una forma di applicazione client pubblica in cui il codice client viene eseguito in un agente utente, ad esempio un Web browser. I client come questi non archiviano segreti perché il contesto del browser è accessibile pubblicamente.
Per altre informazioni sui tipi di applicazione client e sulle opzioni di configurazione dell'applicazione, vedere App client pubbliche e riservate in MSAL.
Prerequisiti
Prima di inizializzare un'applicazione, è necessario registrarla nell'Interfaccia di amministrazione di Microsoft Entra stabilendo una relazione di trust tra l'applicazione e Microsoft Identity Platform.
Dopo aver registrato l'app, sono necessari alcuni o tutti i valori seguenti disponibili nell'Interfaccia di amministrazione di Microsoft Entra.
Valore | Obbligatorio | Descrizione |
---|---|---|
ID applicazione (client) | Richiesto | Un GUID che identifica in modo univoco l'applicazione all'interno di Microsoft Identity Platform. |
Autorità | Facoltativo | L'URL del provider di identità (l'istanza) e i destinatari di accesso dell'applicazione. L'istanza e i destinatari di accesso, se concatenati, costituiscono l'autorità. |
ID della directory (tenant) | Facoltativo | Specificare l'ID directory (tenant) se si sta creando un'applicazione line-of-business esclusivamente per l'organizzazione, spesso definita applicazione a tenant singolo. |
URI di reindirizzamento | Facoltativo | Se si sta creando un'app Web, redirectUri specifica dove il provider di identità (Microsoft Identity Platform) deve restituire i token di sicurezza che ha prodotto. |
Inizializzare applicazioni MSAL.js 2.x
Inizializzare il contesto di autenticazione MSAL.js creando un'istanza PublicClientApplication con un oggetto Configuration. La proprietà di configurazione minima richiesta è clientID
dell'applicazione, visualizzato come ID (client) applicazione nella pagina delle Informazioni generali della registrazione dell'app nell'Interfaccia di amministrazione di Microsoft Entra.
Ecco un esempio di oggetto di configurazione e creazione di un'istanza di PublicClientApplication
:
const msalConfig = {
auth: {
clientId: "Enter_the_Application_Id_Here",
authority: "https://login.microsoftonline.com/Enter_the_Tenant_Info_Here",
knownAuthorities: [],
redirectUri: "https://localhost:{port}/redirect",
postLogoutRedirectUri: "https://localhost:{port}/redirect",
navigateToLoginRequestUrl: true,
},
cache: {
cacheLocation: "sessionStorage",
storeAuthStateInCookie: false,
},
system: {
loggerOptions: {
loggerCallback: (
level: LogLevel,
message: string,
containsPii: boolean
): void => {
if (containsPii) {
return;
}
switch (level) {
case LogLevel.Error:
console.error(message);
return;
case LogLevel.Info:
console.info(message);
return;
case LogLevel.Verbose:
console.debug(message);
return;
case LogLevel.Warning:
console.warn(message);
return;
}
},
piiLoggingEnabled: false,
},
windowHashTimeout: 60000,
iframeHashTimeout: 6000,
loadFrameTimeout: 0,
},
};
// Create an instance of PublicClientApplication
const msalInstance = new PublicClientApplication(msalConfig);
// Handle the redirect flows
msalInstance
.handleRedirectPromise()
.then((tokenResponse) => {
// Handle redirect response
})
.catch((error) => {
// Handle redirect error
});
handleRedirectPromise
Richiamare handleRedirectPromise quando l'applicazione usa flussi di reindirizzamento. Quando si usano i flussi di reindirizzamento, handleRedirectPromise
deve essere eseguito in ogni caricamento di pagina.
Tre risultati sono possibili dalla promessa:
.then
viene richiamato etokenResponse
è vero: l'applicazione viene restituita da un'operazione di reindirizzamento che ha avuto esito positivo..then
viene richiamato etokenResponse
è falso (null
): l'applicazione non viene restituita da un'operazione di reindirizzamento..catch
viene richiamato: l'applicazione viene restituita da un'operazione di reindirizzamento e si è verificato un errore.
Inizializzare applicazioni MSAL.js 1.x
Inizializzare il contesto di autenticazione MSAL 1.x creando un'istanza di UserAgentApplication con un oggetto di configurazione. La proprietà di configurazione minima richiesta è clientID
dell'applicazione, visualizzata come ID applicazione (client) nella pagina Panoramica della registrazione dell'app nell'Interfaccia di amministrazione di Microsoft Entra.
Per i metodi di autenticazione con flussi di reindirizzamento (loginRedirect e acquireTokenRedirect) in MSAL.js 1.2.x o versioni precedenti, è necessario registrare in modo esplicito l'esito positivo o l'errore di un callback tramite il metodo handleRedirectCallback()
. La registrazione esplicita del callback è necessaria in MSAL.js 1.2.x e versioni precedenti perché i flussi di reindirizzamento non restituiscono promesse diversamente dai metodi con un'esperienza popup. La registrazione del callback è facoltativa in MSAL.js versione 1.3.x e successive.
// Configuration object constructed
const msalConfig = {
auth: {
clientId: "Enter_the_Application_Id_Here",
},
};
// Create UserAgentApplication instance
const msalInstance = new UserAgentApplication(msalConfig);
function authCallback(error, response) {
// Handle redirect response
}
// Register a redirect callback for Success or Error (when using redirect methods)
// **REQUIRED** in MSAL.js 1.2.x and earlier
// **OPTIONAL** in MSAL.js 1.3.x and later
msalInstance.handleRedirectCallback(authCallback);
Istanza singola e configurazione
Entrambi MSAL.js 1.x e 2.x sono progettati per avere una singola istanza e una configurazione rispettivamente di UserAgentApplication
o PublicClientApplication
per rappresentare un singolo contesto di autenticazione.
Più istanze di UserAgentApplication
o PublicClientApplication
non sono consigliate perché possono causare voci di cache e comportamento nel browser in conflitto.
Passaggi successivi
L'esempio di codice MSAL.js 2.x in GitHub illustra la creazione di un'istanza di PublicClientApplication con un oggetto Configuration: