Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Gäller för:
Externa klienter (läs mer)
I den här artikeln får du lära dig hur du anropar ett webb-API från din Node.js-klientwebbapp med hjälp av åtkomsttoken som du skaffar i Hämta åtkomsttoken. Webb-API:et skyddas av Microsoft Entras externa ID. Den här artikeln är den fjärde och sista delen i en guideserie i fyra delar.
Förutsättning
- Slutför stegen i den första delen av den här guideserien, Förbered extern hyresgäst för att anropa ett API i en Node.js webbapplikation.
- Slutför stegen i den andra delen av den här guideserien Förbered appen för att anropa ett API i ett Node.js webbprogram.
- Slutför stegen i den tredje delen av den här guideserien Hämta en åtkomsttoken i din Node.js webbapp artikel.
Uppdatera kod
I kodredigeraren öppnar du vägar/todos.js fil och lägger sedan till följande kod:
const express = require('express'); const router = express.Router(); const toDoListController = require('../controller/todolistController'); const authProvider = require('../auth/AuthProvider'); const { protectedResources } = require('../authConfig'); // custom middleware to check auth state function isAuthenticated(req, res, next) { if (!req.session.isAuthenticated) { return res.redirect('/auth/signin'); // redirect to sign-in route } next(); } // isAuthenticated checks if user is authenticated router.get('/',isAuthenticated, authProvider.getToken(protectedResources.toDoListAPI.scopes.read),toDoListController.getToDos); router.delete('/', isAuthenticated,authProvider.getToken(protectedResources.toDoListAPI.scopes.write),toDoListController.deleteToDo); router.post('/',isAuthenticated,authProvider.getToken(protectedResources.toDoListAPI.scopes.write),toDoListController.postToDo); module.exports = router;Den här filen innehåller expressvägar för att skapa, läsa och ta bort resursen i det skyddade API:et. Varje väg använder tre mellanprogramsfunktioner som körs i den sekvensen:
isAuthenticatedkontrollerar om användaren är autentiserad.getTokenbegär en åtkomsttoken. Du definierade den här funktionen tidigare i Hämta åtkomsttoken. Till exempel begär POST-begäran (create resource route) en åtkomsttoken med läs- och skrivbehörighet.Slutligen hanterar metoderna
postToDoellerdeleteToDogetToDosden faktiska logiken för att manipulera resursen. Dessa funktioner definieras i styrenhet/todolistController.js fil.
I kodredigeraren öppnar du kontrollant/todolistController.js fil och lägger sedan till följande kod:
const { callEndpointWithToken } = require('../fetch'); const { protectedResources } = require('../authConfig'); exports.getToDos = async (req, res, next) => { try { const todoResponse = await callEndpointWithToken( protectedResources.toDoListAPI.endpoint, req.session.accessToken, 'GET' ); res.render('todos', { isAuthenticated: req.session.isAuthenticated, todos: todoResponse.data }); } catch (error) { next(error); } }; exports.postToDo = async (req, res, next) => { try { if (!!req.body.description) { let todoItem = { description: req.body.description, }; await callEndpointWithToken( protectedResources.toDoListAPI.endpoint, req.session.accessToken, 'POST', todoItem ); res.redirect('todos'); } else { throw { error: 'empty request' }; } } catch (error) { next(error); } }; exports.deleteToDo = async (req, res, next) => { try { await callEndpointWithToken( protectedResources.toDoListAPI.endpoint, req.session.accessToken, 'DELETE', req.body._id ); res.redirect('todos'); } catch (error) { next(error); } };Var och en av dessa funktioner samlar in all information som krävs för att anropa ett API. Sedan delegeras arbetet till funktionen
callEndpointWithTokenoch väntar på ett svar. FunktionencallEndpointWithTokendefinieras i filen fetch.js. Om du till exempel vill skapa en resurs i API:et skickar funktionenpostToDoen slutpunkt, en åtkomsttoken, en HTTP-metod och en begärandetext till funktionencallEndpointWithTokenoch väntar på ett svar. Användaren omdirigeras sedan till todo.hbs vy för att visa alla aktiviteter.Öppna fetch.js fil i kodredigeraren och lägg sedan till följande kod:
const axios = require('axios'); /** * Makes an Authorization "Bearer" request with the given accessToken to the given endpoint. * @param endpoint * @param accessToken * @param method */ const callEndpointWithToken = async (endpoint, accessToken, method, data = null) => { const options = { headers: { Authorization: `Bearer ${accessToken}`, }, }; switch (method) { case 'GET': return await axios.get(endpoint, options); case 'POST': return await axios.post(endpoint, data, options); case 'DELETE': return await axios.delete(endpoint + `/${data}`, options); default: return null; } }; module.exports = { callEndpointWithToken, };Den här funktionen gör det faktiska API-anropet. Observera hur du inkluderar åtkomsttoken som värdet för ägartoken i HTTP-begärandehuvudet:
//... headers: { Authorization: `Bearer ${accessToken}`, } //...I kodredigeraren öppnar du .env-fil och lägger sedan till följande konfiguration:
# Use this variable only in the development environment. # Please remove the variable when you move the app to the production environment. NODE_TLS_REJECT_UNAUTHORIZED='0'Inställningen
NODE_TLS_REJECT_UNAUTHORIZED='0'i .env-filen instruerar Node.js att ignorera eventuella SSL-certifikatfel, till exempel det självsignerade certifikatfelet.Öppna filen
app.jsi kodredigeraren och sedan:Lägg till todo-routern med hjälp av följande kod:
var todosRouter = require('./routes/todos');Använd todo-routern med följande kod:
app.use('/todos', todosRouter);
Köra och testa webbapp och API
Nu är du redo att anropa webb-API:et från klientwebbappen:
Använd stegen i artikeln Secure an ASP.NET web API för att starta webb-API-appen. Webb-API:et är nu redo att hantera klientbegäranden.
I terminalen kontrollerar du att du är i projektmappen som innehåller klientwebbappen, till exempel
ciam-sign-in-call-api-node-express-web-app, och kör sedan följande kommando:npm startDin klientwebapp startar.
Använd stegen i Kör och testa exempelwebbappen och API- för att visa hur klientappen anropar webb-API:et.
Relaterat innehåll
Du kanske vill: