Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Karena MSAL Node mendukung berbagai pemberian kode otorisasi, ada dukungan untuk API publik yang berbeda per hibah dan permintaan yang sesuai. Artikel ini akan memandu Anda memahami berbagai API publik yang tersedia untuk setiap alur dan tipe permintaan yang sesuai. Sangat disarankan agar Anda menerapkan alur kode otorisasi untuk aplikasi Anda.
Alur Kode Otorisasi
API Publik
getAuthCodeUrl(): API ini adalah langkah pertama dari
authorization code grantuntuk MSAL Node. Permintaannya adalah jenis AuthorizationUrlRequest. Aplikasi dikirimi URL yang dapat digunakan untuk menghasilkanauthorization code. URL ini dapat dibuka di browser pilihan, di mana pengguna dapat memasukkan kredensial mereka, dan akan dialihkan kembali keredirectUri(terdaftar selama pendaftaran aplikasi) denganauthorization code.authorization codesekarang dapat ditukarkan dengantokenmelalui langkah berikut. Perhatikan bahwa jika alur kode otorisasi sedang dilakukan untuk aplikasi klien publik, PKCE disarankan.acquireTokenByCode(): API ini adalah leg kedua dari
authorization code grantuntuk MSAL Node. Permintaan yang dibuat di sini harus berjenis AuthorizationCodeRequest. Aplikasi meneruskanauthorization codeyang diterima sebagai bagian dari langkah di atas dan menukarkannya dengantoken. Bukan berarti jika alur kode otorisasi sedang dilakukan untuk aplikasi klien publik, PKCE disarankan.
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);
});
Alur Kode Perangkat
API Publik
-
acquireTokenByDeviceCode(): API ini memungkinkan aplikasi memperoleh token dengan pemberian Kode Perangkat. Permintaannya adalah jenis DeviceCodeRequest. API ini memperoleh sebuah
tokendari otoritas melalui alur kode perangkat OAuth 2.0. Alur ini dirancang untuk perangkat yang tidak memiliki akses ke browser atau memiliki batasan input. Server otorisasi mengeluarkan objek DeviceCode dengan kode verifikasi, kode pengguna akhir, dan URI verifikasi pengguna akhir. Objek DeviceCode disediakan melalui panggilan balik, dan pengguna akhir harus diinstruksikan untuk menggunakan perangkat lain untuk menavigasi ke URI verifikasi untuk memasukkan kredensial. Karena klien tidak dapat menerima permintaan masuk, klien melakukan polling pada server otorisasi berulang kali hingga pengguna akhir menyelesaikan input kredensial.
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));
});
Alur Refresh Token
API Publik
-
acquireTokenByRefreshToken: API ini memperoleh token dengan bertukar token refresh yang disediakan untuk sekumpulan token baru. Permintaan berjenis RefreshTokenRequest.
refresh tokentidak pernah dikembalikan kepada pengguna sebagai respons, tetapi dapat diakses dari cache pengguna. Disarankan agar Anda menggunakanacquireTokenSilent()untuk skenario non-interaktif. Saat menggunakan acquireTokenSilent(), MSAL akan menangani penyimpanan cache dan penyegaran token secara otomatis.
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));
});
Aliran Senyap
API Publik
-
acquireTokenSilent: API ini memperoleh token secara diam-diam, jika cache disediakan oleh pengguna, atau ketika cache dibuat dengan mendahului panggilan ini dengan alur interaktif lainnya (misalnya: alur kode otorisasi). Permintaannya adalah jenis SilentFlowRequest.
tokendiperoleh tanpa interaksi saat pengguna menentukan akun tempat token diminta.
/**
* 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);
});
Alur Kredensial Klien
API Publik
- acquireTokenByClientCredential: API ini memperoleh token menggunakan kredensial aplikasi klien rahasia untuk mengautentikasi (alih-alih meniru pengguna) saat memanggil layanan web lain. Dalam skenario ini, klien biasanya adalah layanan web tingkat menengah, layanan daemon, atau aplikasi web back-end. Untuk tingkat jaminan yang lebih tinggi, platform identitas Microsoft juga memungkinkan layanan yang melakukan panggilan untuk menggunakan sertifikat (bukan rahasia bersama) sebagai kredensial. Permintaan ini bertipe ClientCredentialRequest.
Menggunakan rahasia dengan aman
Rahasia tidak boleh dikodekan secara permanen. Paket npm dotenv dapat digunakan untuk menyimpan rahasia dalam file .env (terletak di direktori akar proyek) yang harus disertakan dalam .gitignore untuk mencegah unggahan rahasia yang tidak disengaja.
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));
});
Atas Nama Flow
- acquireTokenOnBehalfOf: API ini mengimplementasikan On Behalf Of Flow, yang digunakan saat aplikasi memanggil API layanan/web, yang pada gilirannya perlu memanggil API layanan/web lain yang menggunakan alur autentikasi lain (kode perangkat, nama pengguna/kata sandi, dll). Token akses diperoleh oleh API web awalnya (oleh salah satu alur API web), dan API web kemudian dapat menukar token ini dengan token lain melalui OBO. Permintaan ini bertipe OnBehalfOfRequest
Silakan lihat alur contoh On Behalf Of untuk petunjuk penggunaan: