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.
Berlaku untuk: Penyewa Tenaga Kerja
Penyewa eksternal (pelajari lebih lanjut)
Dalam artikel ini, Anda memperbarui kode, untuk mengaktifkan aplikasi web Anda untuk memperoleh token akses. Anda menggunakan Microsoft Authentication Library (MSAL) untuk node untuk menyederhanakan penambahan autentikasi dan otorisasi ke aplikasi web simpul Anda. Artikel ini adalah bagian ketiga dari seri panduan empat bagian.
Prasyarat
- Selesaikan langkah-langkah di bagian pertama dari seri panduan ini, Siapkan tenant eksternal dalam memanggil API di aplikasi web Node.js.
- Selesaikan langkah-langkah di bagian kedua dari seri panduan ini, Siapkan aplikasi untuk memanggil API di aplikasi web Node.js.
Memperbarui objek konfigurasi MSAL
Di editor kode Anda, buka file authConfig.js, lalu perbarui kode dengan menambahkan objek protectedResources
:
//..
const toDoListReadScope = process.env.TODOLIST_READ || 'api://Enter_the_Web_Api_Application_Id_Here/ToDoList.Read';
const toDoListReadWriteScope = process.env.TODOLIST_READWRITE || 'api://Enter_the_Web_Api_Application_Id_Here/ToDoList.ReadWrite';
const protectedResources = {
toDoListAPI: {
endpoint: 'https://localhost:44351/api/todolist',
scopes: {
read: [toDoListReadScope],
write: [toDoListReadWriteScope],
},
},
};
module.exports = {
//..
protectedResources,
//..
};
Dalam file authConfig.js Anda, ganti Enter_the_Web_Api_Application_Id_Here
dengan ID Klien dari aplikasi API web yang Anda daftarkan di tenant pelanggan Anda.
Variabel todolistReadScope
dan todolistReadWriteScope
menyimpan URL cakupan penuh API web yang Anda tetapkan di penyewa eksternal Anda. Pastikan Anda mengekspor objek protectedResources
.
Memperoleh token akses
Di editor kode Anda, buka file autentikasi/AuthProvider.js, lalu perbarui metode getToken
di kelas AuthProvider
:
const axios = require('axios');
class AuthProvider {
//...
getToken(scopes) {
return async function (req, res, next) {
const msalInstance = authProvider.getMsalInstance(authProvider.config.msalConfig);
try {
msalInstance.getTokenCache().deserialize(req.session.tokenCache);
const silentRequest = {
account: req.session.account,
scopes: scopes,
};
const tokenResponse = await msalInstance.acquireTokenSilent(silentRequest);
req.session.tokenCache = msalInstance.getTokenCache().serialize();
req.session.accessToken = tokenResponse.accessToken;
next();
} catch (error) {
if (error instanceof msal.InteractionRequiredAuthError) {
req.session.csrfToken = authProvider.cryptoProvider.createNewGuid();
const state = authProvider.cryptoProvider.base64Encode(
JSON.stringify({
redirectTo: 'http://localhost:3000/todos',
csrfToken: req.session.csrfToken,
})
);
const authCodeUrlRequestParams = {
state: state,
scopes: scopes,
};
const authCodeRequestParams = {
state: state,
scopes: scopes,
};
authProvider.redirectToAuthCodeUrl(
req,
res,
next,
authCodeUrlRequestParams,
authCodeRequestParams,
msalInstance
);
}
next(error);
}
};
}
//...
}
Pertama, fungsi mencoba memperoleh token akses secara diam-diam (tanpa meminta kredensial kepada pengguna):
const silentRequest = { account: req.session.account, scopes: scopes, }; const tokenResponse = await msalInstance.acquireTokenSilent(silentRequest);
Jika Anda berhasil memperoleh token secara diam-diam, simpan dalam sesi. Anda mengambil token dari sesi saat memanggil API.
req.session.accessToken = tokenResponse.accessToken;
Jika Anda gagal memperoleh token tanpa interaksi pengguna (seperti dengan pengecualian
InteractionRequiredAuthError
), minta ulang token akses baru.
Nota
Setelah aplikasi klien Anda menerima token akses, aplikasi tersebut harus memperlakukannya sebagai string buram. Token akses ditujukan untuk API, bukan untuk aplikasi klien. Oleh karena itu, aplikasi klien tidak boleh mencoba membaca atau memproses token akses. Sebaliknya, aplikasi ini harus menyertakan token akses as-is dalam header Otorisasi permintaan mereka ke API. API bertanggung jawab untuk menginterpretasikan token akses dan menggunakannya untuk mengautentikasi dan mengotorisasi permintaan aplikasi klien.