Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
MSAL.js fournit la classe SignedHttpRequest pour faciliter la création de requêtes HTTP signées (SHR) pour des charges utiles (par exemple, des jetons) obtenues hors bande, en dehors de MSAL.js. Cela permet aux applications de tirer parti du même chiffrement et de la même mise en cache qu’utilise MSAL.js pour la preuve de possession du jeton d’accès pour leurs propres données.
Remarque : La SignedHttpRequest classe est destinée aux cas d’usage avancés où la fonctionnalité de preuve de possession du jeton d’accès intégré ne peut pas être utilisée. Parmi ces cas d’usage figuraient des jetons d’accès Microsoft Entra ID ou MSA obtenus hors bande via MSAL.js, ainsi que des jetons d’accès de charge de travail.
Exigences
Pour utiliser l’API SignedHttpRequest , une application doit :
- Transférez l’empreinte numérique de clé publique retournée au serveur qui émet la charge utile, et ce serveur doit incorporer l’empreinte numérique à l’intérieur de la charge utile signée. Il s’agit généralement d’un JWT signé.
- Fournissez à MSAL la charge utile et l’empreinte numérique de la clé publique d’origine.
- Le serveur de ressources pour lequel le SHR est destiné doit comprendre comment décoder et valider la charge utile SHR et interne.
paramètres de Microsoft Entra
Pour les jetons émis par Microsoft Entra ID ou MSA, les applications doivent inclure des paramètres de requête supplémentaires dans leurs demandes de jetons :
-
req_cnf: chaîne encodée en base64, y compris l’empreinte numérique de la clé publique. -
token_type: Défini surpopafin d’indiquer qu’il s’agit d’un flux de preuve de possession.
Sample
Utilisation de l’application
api.ts
import { SignedHttpRequest } from "@azure/msal-browser";
const resourceRequestUri = "https://api.contoso.com/my-api";
const resourceRequestMethod = "GET";
// Instantiate the token binding class. There may be configuration options possible in the future.
const signedHttpRequest = new SignedHttpRequest({
resourceRequestUri,
resourceRequestMethod
});
// Use MSAL to generate and cache the keys, and return the public key thumbprint to the app.
const publicKeyThumbprint = await signedHttpRequest.generatePublicKeyThumbprint();
// Application acquires the payload to the be signed, providing the public key.
// This payload can be cached by the application, if desired.
const payload = await fetchAccessTokenWithoutMsal(publicKeyThumbprint);
// Application invokes custom business logic to acquire nonce (optional)
const nonce = await fetchServerNonce();
// Use MSAL to generate the pop token for the payload.
// This popToken should be used immediately and not be cached by the application.
const popToken = await signedHttpRequest.signRequest(payload, publicKeyThumbprint, { nonce });
// Initiate http request using pop token
const headers = new Headers();
headers.append("Authorization", `PoP ${popToken}`);
const options = {
method: resourceRequestMethod,
headers
};
const response = await fetch(resourceRequestUri, options);
const json = await response.json();
// Delete keys from cache
await signedHttpRequest.removeKeys(publicKeyThumbprint);
Nonces du serveur
L’API SignedHttpRequest prend en charge la possibilité de définir des revendications personnalisées dans le SHR, y compris la nonce, par exemple via un serveur nonce. Pour obtenir un nonce de serveur, procédez comme suit :
- Générez l’empreinte de la clé publique et récupérez la charge utile associée.
- Appelez
SignedHttpRequest.signRequest()sans fournir de valeur de nonce. Ceci générera un SHR avec une réclamationnoncegénéré par une bibliothèque (actuellement un GUID). - Appelez la requête réseau à l’aide du SHR sur le serveur de ressources.
- Le serveur de ressources répond avec une erreur et une nouvelle
noncevaleur à utiliser dans un en-tête. - L’application doit analyser cet en-tête et réinvoke
SignedHttpRequest.signRequest(), cette fois en passant la valeur analyséenonce(à l’avenir, MSAL fournit une fonction d’assistance pour analyser l’en-tête). - Réinvoke la requête réseau à l’aide du SHR sur le serveur de ressources.