Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Aangezien MSAL Node verschillende autorisatiecodetoestemmingen ondersteunt, is er ondersteuning voor verschillende openbare API's per toekenning en de bijbehorende aanvraag. In dit artikel worden de verschillende openbare API's beschreven die beschikbaar zijn voor elke stroom en het bijbehorende aanvraagtype. Het wordt sterk aanbevolen om de autorisatiecodestroom voor uw toepassing te implementeren.
Autorisatiecodestroom
Openbare API's
getAuthCodeUrl(): Deze API is de eerste stap van de
authorization code grantvoor MSAL Node. De aanvraag is van het type AuthorizationUrlRequest. De toepassing ontvangt een URL die kan worden gebruikt om eenauthorization codete genereren. Deze URL kan worden geopend in een browser naar keuze, waar de gebruiker zijn inloggegevens kan invoeren en vervolgens wordt teruggeleid naar deredirectUri(geregistreerd tijdens de app-registratie) met eenauthorization code. Deauthorization codekan nu worden ingewisseld voor eentokenmet de volgende stap. Merk op dat als de autorisatiecodeflow wordt gebruikt door een publieke clienttoepassing, PKCE wordt aanbevolen.acquireTokenByCode(): Deze API is de tweede stap van de
authorization code grantvoor MSAL Node. De hier samengestelde aanvraag moet van het type AuthorizationCodeRequest zijn. De toepassing geeft deauthorization codedoor die als onderdeel van de voorgaande stap is ontvangen en wisselt deze in voor eentoken. Merk op dat als de autorisatiecodeflow wordt gebruikt door een publieke clienttoepassing, PKCE wordt aanbevolen.
const authCodeUrlParameters = {
scopes: ["sample_scope"],
redirectUri: "your_redirect_uri",
};
// get url to sign user in and consent to scopes needed for application
cca.getAuthCodeUrl(authCodeUrlParameters).then((response) => {
console.log(response);
}).catch((error) => console.log(JSON.stringify(error)));
const tokenRequest = {
code: "authorization_code",
redirectUri: "your_redirect_uri",
scopes: ["sample_scope"],
};
// acquire a token by exchanging the code
cca.acquireTokenByCode(tokenRequest).then((response) => {
console.log("\nResponse: \n:", response);
}).catch((error) => {
console.log(error);
});
Apparaatcodeproces
Openbare API's
-
acquireTokenByDeviceCode(): met deze API kan de toepassing een token verkrijgen met de device code-toekenning. De aanvraag is van het type DeviceCodeRequest. Deze API verkrijgt een
tokenvan de instantie met behulp van de OAuth2.0-apparaatcodestroom. Deze stroom is ontworpen voor apparaten die geen toegang hebben tot een browser of invoerbeperkingen hebben. De autorisatieserver geeft een DeviceCode-object uit met een verificatiecode, een eindgebruikercode en de verificatie-URI van de eindgebruiker. Het DeviceCode-object wordt geleverd via een callback en de eindgebruiker moet worden geïnstrueerd om een ander apparaat te gebruiken om naar de verificatie-URI te navigeren om referenties in te voeren. Omdat de client geen binnenkomende aanvragen kan ontvangen, wordt de autorisatieserver herhaaldelijk gepeild totdat de eindgebruiker de invoer van referenties heeft voltooid.
const msalConfig = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
}
};
const pca = new msal.PublicClientApplication(msalConfig);
const deviceCodeRequest = {
deviceCodeCallback: (response) => (console.log(response.message)),
scopes: ["user.read"],
};
pca.acquireTokenByDeviceCode(deviceCodeRequest).then((response) => {
console.log(JSON.stringify(response));
}).catch((error) => {
console.log(JSON.stringify(error));
});
Tokenstroom vernieuwen
Openbare API's
-
acquireTokenByRefreshToken: Met deze API wordt een token verkregen door het vernieuwingstoken uit te wisselen dat is opgegeven voor een nieuwe set tokens. De aanvraag is van het type RefreshTokenRequest. De
refresh tokenwaarde wordt nooit geretourneerd aan de gebruiker in een antwoord, maar kan worden geopend vanuit de gebruikerscache. Het wordt aanbevolen om te gebruikenacquireTokenSilent()voor niet-interactieve scenario's. Wanneer u acquireTokenSilent() gebruikt, verwerkt MSAL automatisch de caching en het vernieuwen van tokens.
const config = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
}
};
const pca = new msal.PublicClientApplication(config);
const refreshTokenRequest = {
refreshToken: "",
scopes: ["user.read"],
};
pca.acquireTokenByRefreshToken(refreshTokenRequest).then((response) => {
console.log(JSON.stringify(response));
}).catch((error) => {
console.log(JSON.stringify(error));
});
Stille stroom
Openbare API's
-
acquireTokenSilent: Deze API verkrijgt geruisloos een token als de cache door de gebruiker wordt opgegeven, of wanneer de cache wordt aangemaakt door vóór deze aanroep een andere interactieve flow uit te voeren (bijvoorbeeld de autorisatiecodeflow). De aanvraag is van het type SilentFlowRequest. De
tokenwordt op de achtergrond verkregen wanneer een gebruiker het account opgeeft waarvoor het token wordt aangevraagd.
/**
* Cache Plugin configuration
*/
const cachePath = "path_to_your_cache_file/msal_cache.json"; // Replace this string with the path to your valid cache file.
const readFromStorage = () => {
return fs.readFile(cachePath, "utf-8");
};
const writeToStorage = (getMergedState) => {
return readFromStorage().then(oldFile =>{
const mergedState = getMergedState(oldFile);
return fs.writeFile(cachePath, mergedState);
})
};
const cachePlugin = {
readFromStorage,
writeToStorage
};
/**
* Public Client Application Configuration
*/
const publicClientConfig = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
redirectUri: "your_redirectUri_here",
},
cache: {
cachePlugin
},
};
/** Request Configuration */
const scopes = ["your_scopes"];
const authCodeUrlParameters = {
scopes: scopes,
redirectUri: "your_redirectUri_here",
};
const pca = new msal.PublicClientApplication(publicClientConfig);
const msalCacheManager = pca.getCacheManager();
let accounts;
pca.getAuthCodeUrl(authCodeUrlParameters)
.then((response) => {
console.log(response);
}).catch((error) => console.log(JSON.stringify(error)));
const tokenRequest = {
code: req.query.code,
redirectUri: "http://localhost:3000/redirect",
scopes: scopes,
};
pca.acquireTokenByCode(tokenRequest).then((response) => {
console.log("\nResponse: \n:", response);
return msalCacheManager.writeToPersistence();
}).catch((error) => {
console.log(error);
});
// get Accounts
accounts = msalCacheManager.getAllAccounts();
// Build silent request
const silentRequest = {
account: accounts[0], // You would filter accounts to get the account you want to get tokens for
scopes: scopes,
};
// Acquire Token Silently to be used in MS Graph call
pca.acquireTokenSilent(silentRequest).then((response) => {
console.log("\nSuccessful silent token acquisition:\nResponse: \n:", response);
return msalCacheManager.writeToPersistence();
}).catch((error) => {
console.log(error);
});
Stroom voor clientreferenties
Openbare API's
- acquireTokenByClientCredential: Deze API verkrijgt een token met behulp van de referenties van de vertrouwelijke clienttoepassing om te verifiëren (in plaats van een gebruiker te imiteren) bij het aanroepen van een andere webservice. In dit scenario is de client doorgaans een webservice in de middelste laag, een daemon-service of een back-endwebtoepassing. Voor een hoger zekerheidsniveau laat het Microsoft Identity-platform ook toe dat de aanroepende service een certificaat gebruikt als referentie (in plaats van een gedeeld geheim). De aanvraag is van het type ClientCredentialRequest.
Geheimen veilig gebruiken
Geheimen mogen nooit hardcoded worden. Het dotenv npm-pakket kan worden gebruikt voor het opslaan van geheimen in een .env-bestand (in de hoofdmap van het project) dat moet worden opgenomen in .gitignore om onbedoelde uploads van de geheimen te voorkomen.
import "dotenv/config"; // process.env now has the values defined in a .env file
const config = {
auth: {
clientId: "your_client_id_here",
authority: "your_authority_here",
clientSecret: process.env.clientSecret
}
};
// Create msal application object
const cca = new msal.ConfidentialClientApplication(config);
// With client credentials flows permissions need to be granted in the portal by a tenant administrator.
// The scope is always in the format "<resource>/.default"
const clientCredentialRequest = {
scopes: ["https://graph.microsoft.com/.default"], // replace with your resource
};
cca.acquireTokenByClientCredential(clientCredentialRequest).then((response) => {
console.log("Response: ", response);
}).catch((error) => {
console.log(JSON.stringify(error));
});
Namens Flow
- acquireTokenOnBehalfOf: Deze API implementeert de On Behalf Of Flow, die wordt gebruikt wanneer een toepassing een service/web-API aanroept, die op zijn beurt een andere service/web-API moet aanroepen die gebruikmaakt van een andere verificatiestroom (apparaatcode, gebruikersnaam/wachtwoord, enzovoort). Het toegangstoken wordt in eerste instantie verkregen door de web-API (door een van de web-API-stromen) en de web-API kan dit token vervolgens uitwisselen voor een ander token via OBO. De aanvraag is van het type OnBehalfOfRequest
Bekijk het voorbeeld van de On Behalf Of-stroom voor gebruiksinstructies: