Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Externe Mandanten (weitere Informationen)
In diesem Artikel aktualisieren Sie Ihren Code, damit Ihre Web-App ein Zugriffstoken erhält. Sie verwenden die Microsoft Authentication Library (MSAL) für Node , um das Hinzufügen von Authentifizierung und Autorisierung zu Ihrer Knotenwebanwendung zu vereinfachen. Dieser Artikel ist der dritte Teil einer vierteiligen Führungslinie.
Voraussetzungen
- Führen Sie die Schritte im ersten Teil dieser Anleitungsreihe aus, bereiten Sie den externen Mandanten vor, um eine API in einer Node.js-Webanwendung aufzurufen.
- Führen Sie die Schritte im zweiten Teil dieser Anleitungsreihe aus, und bereiten Sie die App vor, um eine API in einer Node.js-Webanwendung aufzurufen.
Aktualisieren des MSAL-Konfigurationsobjekts
Öffnen Sie in Ihrem Code-Editor authConfig.js Datei, und aktualisieren Sie den Code, indem Sie das protectedResources Objekt hinzufügen:
//..
const toDoListReadScope = process.env.TODOLIST_READ || 'api://Enter_the_Web_Api_Application_Id_Here/ToDoList.Read';
const toDoListReadWriteScope = process.env.TODOLIST_READWRITE || 'api://Enter_the_Web_Api_Application_Id_Here/ToDoList.ReadWrite';
const protectedResources = {
toDoListAPI: {
endpoint: 'https://localhost:44351/api/todolist',
scopes: {
read: [toDoListReadScope],
write: [toDoListReadWriteScope],
},
},
};
module.exports = {
//..
protectedResources,
//..
};
Ersetzen Sie in Ihrer authConfig.js-Datei Enter_the_Web_Api_Application_Id_Here durch die Anwendungs-ID (Client) der Web-API-App, die Sie im Mandanten Ihres Kunden registriert haben.
Die variablen todolistReadScope und todolistReadWriteScope enthalten die Web-API-URLs, die Sie in Ihrem externen Mandanten festgelegt haben. Stellen Sie sicher, dass Sie das protectedResources Objekt exportieren.
Zugriffstoken abrufen
Öffnen Sie in Ihrem Code-Editor die Authentifizierungs-/AuthProvider.js datei, und aktualisieren Sie dann die getToken Methode in der AuthProvider Klasse:
const axios = require('axios');
class AuthProvider {
//...
getToken(scopes) {
return async function (req, res, next) {
const msalInstance = authProvider.getMsalInstance(authProvider.config.msalConfig);
try {
msalInstance.getTokenCache().deserialize(req.session.tokenCache);
const silentRequest = {
account: req.session.account,
scopes: scopes,
};
const tokenResponse = await msalInstance.acquireTokenSilent(silentRequest);
req.session.tokenCache = msalInstance.getTokenCache().serialize();
req.session.accessToken = tokenResponse.accessToken;
next();
} catch (error) {
if (error instanceof msal.InteractionRequiredAuthError) {
req.session.csrfToken = authProvider.cryptoProvider.createNewGuid();
const state = authProvider.cryptoProvider.base64Encode(
JSON.stringify({
redirectTo: 'http://localhost:3000/todos',
csrfToken: req.session.csrfToken,
})
);
const authCodeUrlRequestParams = {
state: state,
scopes: scopes,
};
const authCodeRequestParams = {
state: state,
scopes: scopes,
};
authProvider.redirectToAuthCodeUrl(
req,
res,
next,
authCodeUrlRequestParams,
authCodeRequestParams,
msalInstance
);
}
next(error);
}
};
}
//...
}
Zunächst versucht die Funktion, ein Zugriffstoken im Hintergrund abzurufen (ohne den Benutzer zur Eingabe von Anmeldeinformationen aufzufordern):
const silentRequest = { account: req.session.account, scopes: scopes, }; const tokenResponse = await msalInstance.acquireTokenSilent(silentRequest);Wenn Sie ein Token erfolgreich unauffällig abrufen, speichern Sie es in einer Session. Sie rufen das Token aus der Sitzung ab, wenn Sie eine API aufrufen.
req.session.accessToken = tokenResponse.accessToken;Wenn Sie das Token nicht lautlos abrufen können (z. B. bei einer
InteractionRequiredAuthError-Ausnahme), fordern Sie ein Zugriffstoken erneut an.
Hinweis
Sobald Ihre Clientanwendung ein Zugriffstoken empfängt, sollte sie als undurchsichtige Zeichenfolge behandelt werden. Das Zugriffstoken ist für die API vorgesehen, nicht für die Clientanwendung. Daher sollte die Clientanwendung nicht versuchen, das Zugriffstoken zu lesen oder zu verarbeiten. Stattdessen sollte es das Zugriffstoken as-is in den Autorisierungsheader seiner Anforderungen an die API einschließen. Die API ist für die Interpretation des Zugriffstokens und die Verwendung des Zugriffstokens verantwortlich, um die Anforderungen der Clientanwendung zu authentifizieren und zu autorisieren.