Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Eftersom MSAL Node stöder olika auktoriseringskodsbidrag finns det stöd för olika offentliga API:er per beviljande och motsvarande begäran. Den här artikeln beskriver de olika offentliga API:er som är tillgängliga för varje flöde och motsvarande typ av begäran. Vi rekommenderar starkt att du implementerar auktoriseringskodflödet för ditt program.
Auktoriseringskodflöde
Offentliga API:er
getAuthCodeUrl(): Det här API:et är den första delen av
authorization code grantför MSAL-noden. Begäran är av typen AuthorizationUrlRequest. Applikationen får en URL som kan användas för att generera enauthorization code. Den här URL:en kan öppnas i en webbläsare där användaren kan ange sina autentiseringsuppgifter och omdirigeras tillbaka tillredirectUri(registreras under appregistreringen) med enauthorization code. Denauthorization codekan nu lösas in mot entokengenom följande steg. Observera att om auktoriseringskodflödet görs för ett offentligt klientprogram rekommenderar vi PKCE .acquireTokenByCode(): Det här API:et är den andra delen av
authorization code grantför MSAL-noden. Den begäran som skapas här bör vara av typen AuthorizationCodeRequest. Applikationen vidarebefordradeauthorization codesom togs emot i föregående steg och byter ut det mot etttoken. Observera att om auktoriseringskodflödet används för ett offentligt klientprogram rekommenderas PKCE.
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);
});
Flöde för enhetskod
Offentliga API:er
-
acquireTokenByDeviceCode(): Med det här API:et kan programmet hämta en token med enhetskodsbidrag. Begäran är av typen DeviceCodeRequest. Det här API:et hämtar en
tokenfrån auktoriseringsservern med OAuth 2.0:s enhetskodflöde. Det här flödet är utformat för enheter som inte har åtkomst till en webbläsare eller har indatabegränsningar. Auktoriseringsservern utfärdar ett DeviceCode-objekt med en verifieringskod, en slutanvändarkod och URI för slutanvändarverifiering. DeviceCode-objektet tillhandahålls via ett återanrop och slutanvändaren bör instrueras att använda en annan enhet för att navigera till verifierings-URI:n för att ange autentiseringsuppgifter. Eftersom klienten inte kan ta emot inkommande begäranden avsöker den auktoriseringsservern upprepade gånger tills slutanvändaren har slutfört indata för autentiseringsuppgifter.
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));
});
Uppdatera tokenflöde
Offentliga API:er
-
acquireTokenByRefreshToken: Det här API:et hämtar en token genom att byta ut uppdateringstoken som tillhandahålls för en ny uppsättning token. Begäran är av typen RefreshTokenRequest.
refresh tokenReturneras aldrig till användaren i ett svar, men kan nås från användarens cacheminne. Vi rekommenderar att du använderacquireTokenSilent()för icke-interaktiva scenarier. När du använder acquireTokenSilent()hanterar MSAL cachelagring och uppdatering av token automatiskt.
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));
});
Tyst flöde
Offentliga API:er
-
acquireTokenSilent: Det här API:et hämtar en token tyst, om cachen tillhandahålls av användaren eller när cachen skapas genom att föregå det här anropet med något annat interaktivt flöde (t.ex. auktoriseringskodflöde). Begäran är av typen SilentFlowRequest.
tokenHämtas tyst när en användare anger det konto som token begärs för.
/**
* 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);
});
Flöde för klientautentiseringsuppgifter
Offentliga API:er
- acquireTokenByClientCredential: Det här API:et hämtar en token med autentiseringsuppgifterna för det konfidentiella klientprogrammet för att autentisera (i stället för att personifiera en användare) när en annan webbtjänst anropas. I det här scenariot är klienten vanligtvis en mellannivåwebbtjänst, en daemontjänst eller ett serverdelswebbprogram. För en högre säkerhetsnivå tillåter Microsofts identitetsplattform även att den anropande tjänsten använder ett certifikat (i stället för en delad hemlighet) som autentiseringsuppgifter. Begäran är av typen ClientCredentialRequest.
Använda hemligheter på ett säkert sätt
Hemligheter ska aldrig hårdkodas. Dotenv npm-paketet kan användas för att lagra hemligheter i en .env-fil (finns i projektets rotkatalog) som ska ingå i .gitignore för att förhindra oavsiktliga uppladdningar av hemligheterna.
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));
});
På Flows vägnar
- acquireTokenOnBehalfOf: Det här API:et implementerar On Behalf Of Flow, som används när ett program anropar en tjänst/webb-API, som i sin tur måste anropa ett annat tjänst-/webb-API som använder andra autentiseringsflöden (enhetskod, användarnamn/lösenord osv.). Åtkomsttoken hämtas från början av webb-API:et (av något av webb-API-flödena) och webb-API:et kan sedan byta ut denna token mot en annan token via OBO. Begäran är av typen OnBehalfOfRequest
Se exemplet på On Behalf Of-flödet för användningsanvisningar: