Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
MSAL.js poskytuje SignedHttpRequest třídu jako usnadnění při vytváření podepsaných požadavků HTTP (SHRS) pro datové části (např. tokeny), které jsou získány mimo pásmo z MSAL.js. To aplikacím umožňuje využívat stejné šifrování a ukládání do mezipaměti, které MSAL.js používá pro prokázání držení přístupového tokenu, i pro jejich vlastní datové části.
Poznámka: Třída SignedHttpRequest je určena pro pokročilé případy použití, kdy nelze použít předdefinované funkce ověření vlastnictví přístupového tokenu. Mezi příklady těchto případů použití patřily přístupové tokeny Microsoft Entra ID nebo MSA získané mimo pásmo z MSAL.js a přístupové tokeny úloh.
Requirements
Aby bylo možné rozhraní API používat SignedHttpRequest , musí aplikace:
- Předejte serveru, který vydává datovou část, vrácený otisk veřejného klíče a tento server musí otisk vložit do podepsané datové části. Obvykle se jedná o podepsaný JWT.
- Zadejte datovou část a kryptografický otisk původního veřejného klíče zpět do knihovny MSAL.
- Server prostředků, pro který je SHR určen, musí rozumět tomu, jak dekódovat a ověřit SHR i vnitřní datový obsah.
parametry Microsoft Entra
U tokenů vydaných Microsoft Entra ID nebo MSA budou aplikace muset do žádostí o tokeny zahrnout další parametry dotazu:
-
req_cnf: Řetězec kódovaný v base64, včetně kryptografického otisku veřejného klíče. -
token_type: Nastaví se napop, aby se označilo, že se jedná o tok typu proof-of-possession.
Sample
Využití aplikace
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);
Serverové nonce
API SignedHttpRequest umožní nastavit vlastní claimy v SHR, včetně nonce, například pomocí serverového nonce. Chcete-li získat serverový nonce, proveďte následující kroky:
- Vygenerujte kryptografický otisk veřejného klíče a získejte vázanou datovou část.
- Vyvolejte
SignedHttpRequest.signRequest()bez zadání hodnoty nonce. Tím se vygeneruje SHR s claimem generovaným knihovnounonce(aktuálně identifikátorem GUID). - Pomocí SHR na server prostředků vyvoláte síťový požadavek.
- Server prostředků odpoví chybou a novou hodnotou
nonce, která se má použít v hlavičce. - Aplikace bude muset analyzovat tuto hlavičku a znovu volat
SignedHttpRequest.signRequest(), tentokrát s předanou analyzovanou hodnotounonce(v budoucnu MSAL poskytne pomocnou funkci pro analýzu hlavičky). - Znovu odešlete síťový požadavek pomocí SHR na server prostředků.