Konfigurera autentisering i ett node.js-exempelwebb-API med hjälp av Azure Active Directory B2C

I den här artikeln får du lära dig hur du konfigurerar ett node.js-exempelwebbprogram för att anropa ett node.js-exempelwebb-API. Webb-API:et måste skyddas av själva Azure AD B2C. I den här konfigurationen anropar en webbapp, till exempel app-ID: 1 ett webb-API, till exempel app-ID: 2. Användare autentiserar till webbappen för att hämta en åtkomsttoken, som sedan används för att anropa ett skyddat webb-API.

Översikt

Tokenbaserad autentisering säkerställer att begäranden till ett webb-API åtföljs av en giltig åtkomsttoken.

Webbappen slutför följande händelser:

  • Den autentiserar användare med Azure AD B2C.

  • Den hämtar en åtkomsttoken med nödvändiga behörigheter (omfång) för webb-API-slutpunkten.

  • Den skickar åtkomsttoken som en ägartoken i autentiseringshuvudet för HTTP-begäran. Det använder formatet:

Authorization: Bearer <token>

Webb-API:et slutför följande händelser:

  • Den läser ägartoken från auktoriseringshuvudet i HTTP-begäran.

  • Den validerar token.

  • Den verifierar behörigheterna (omfången) i token.

  • Den svarar på HTTP-begäran. Om token inte är giltig svarar webb-API-slutpunkten med ett 401 Unauthorized HTTP-fel.

Översikt över appregistrering

Om du vill att din app ska kunna logga in med Azure AD B2C och anropa ett webb-API måste du registrera två program i Azure AD B2C-katalogen.

  • Med registrering av webbprogram kan din app logga in med Azure AD B2C. Under registreringen anger du omdirigerings-URI:n. Omdirigerings-URI:n är slutpunkten som användarna omdirigeras till av Azure AD B2C när de har slutfört autentiseringen. Appregistreringsprocessen genererar ett program-ID, även kallat klient-ID, som unikt identifierar din app. Du genererar också en klienthemlighet för din app. Din app använder klienthemligheten för att byta ut en auktoriseringskod mot en åtkomsttoken.

  • Med registreringen av webb-API :et kan din app anropa ett säkert webb-API. Registreringen innehåller webb-API-omfång. Omfången ger ett sätt att hantera behörigheter till skyddade resurser, till exempel ditt webb-API. Du beviljar webbprogrambehörigheter till webb-API-omfången. När en åtkomsttoken begärs anger appen önskade behörigheter i omfångsparametern för begäran.

Programregistreringarna och programarkitekturen beskrivs i följande diagram:

Diagram of the application registrations and the application architecture for an app with web A P I.

Förutsättningar

Steg 1: Konfigurera användarflödet

När användare försöker logga in på din app startar appen en autentiseringsbegäran till auktoriseringsslutpunkten via ett användarflöde. Användarflödet definierar och styr användarupplevelsen. När användarna har slutfört användarflödet genererar Azure AD B2C en token och omdirigerar sedan användarna tillbaka till ditt program.

Om du inte redan har gjort det skapar du ett användarflöde eller en anpassad princip. Upprepa stegen för att skapa tre separata användarflöden på följande sätt:

  • Ett kombinerat användarflöde för inloggning och registrering , till exempel susi. Det här användarflödet stöder även funktionen För att glömma ditt lösenord .
  • Ett användarflöde för profilredigering , till exempel edit_profile.
  • Ett användarflöde för lösenordsåterställning , till exempel reset_password.

Azure AD B2C förbereder användarflödesnamnet B2C_1_ . Till exempel kommer susi att bli B2C_1_susi.

Steg 2: Registrera webbappen och API:et

I det här steget skapar du webb- och webb-API-programregistreringarna och anger omfången för webb-API:et.

Steg 2.1: Registrera webb-API-programmet

Så här skapar du appregistreringen för webb-API:et (app-ID: 2):

  1. Logga in på Azure-portalen.

  2. Kontrollera att du använder katalogen som innehåller din Azure AD B2C-klientorganisation. Välj ikonen Kataloger + prenumerationer i portalens verktygsfält.

  3. I portalinställningarna | Sidan Kataloger + prenumerationer, leta upp din Azure AD B2C-katalog i listan Katalognamn och välj sedan Växla.

  4. I Azure-portalen söker du efter och väljer Azure AD B2C.

  5. Välj Appregistreringar och välj sedan Ny registrering.

  6. Som Namn anger du ett namn för programmet (till exempel my-api1). Lämna standardvärdena för omdirigerings-URI och kontotyper som stöds.

  7. Välj Registrera.

  8. När appregistreringen är klar väljer du Översikt.

  9. Registrera program-ID-värdet (klient) för senare användning när du konfigurerar webbprogrammet.

    Screenshot that demonstrates how to get a web A P I application I D.

Steg 2.2: Konfigurera omfång

  1. Välj det my-api1-program som du skapade (app-ID: 2) för att öppna sidan Översikt .

  2. Under Hantera väljer du Exponera ett API.

  3. Bredvid Program-ID-URI väljer du länken Ange. Ersätt standardvärdet (GUID) med ett unikt namn (till exempel tasks-api) och välj sedan Spara.

    När ditt webbprogram begär en åtkomsttoken för webb-API:et bör den lägga till den här URI:n som prefix för varje omfång som du definierar för API:et.

  4. Under Omfång som definieras av det här API:et väljer du Lägg till ett omfång.

  5. Så här skapar du ett omfång som definierar läsåtkomst till API:et:

    1. Ange tasks.read som Omfångsnamn.
    2. För Visningsnamn för administratörsmedgivande anger du Läs åtkomst till uppgifters API.
    3. För Beskrivning av administratörsmedgivande anger du Tillåt läsåtkomst till aktivitets-API:et.
  6. Välj Lägg till definitionsområde.

  7. Välj Lägg till ett omfång och lägg sedan till ett omfång som definierar skrivåtkomst till API:et:

    1. Ange tasks.write som Omfångsnamn.
    2. För Visningsnamn för administratörsmedgivande anger du Skrivåtkomst till aktivitets-API.
    3. För Beskrivning av administratörsmedgivande anger du Tillåt skrivåtkomst till aktivitets-API:et.
  8. Välj Lägg till definitionsområde.

Steg 2.3: Registrera webbappen

Gör följande för att skapa SPA-registreringen:

  1. Logga in på Azure-portalen.
  2. Om du har åtkomst till flera klienter väljer du ikonen Inställningar på den översta menyn för att växla till din Azure AD B2C-klient från menyn Kataloger + prenumerationer.
  3. Sök efter och markera Azure AD B2C.
  4. Välj Appregistreringar och välj sedan Ny registrering.
  5. Ange ett namn för programmet (till exempel app-ID: 1).
  6. Under Kontotyper som stöds, välj Konton i valfri identitetsleverantör eller organisationskatalog (för autentisering av användare med användarflöden).
  7. Under Omdirigerings-URI väljer du Webb och anger http://localhost:3000/redirect sedan i textrutan URL
  8. Under Behörigheter väljer du kryssrutan Bevilja administratörsmedgivande till openid- och offlineåtkomstbehörigheter .
  9. Välj Registrera.

Steg 2.4: Skapa en klienthemlighet

  1. På sidan Azure AD B2C – Appregistreringar väljer du det program som du skapade, till exempel App-ID: 1.
  2. I den vänstra menyn går du till Hantera och väljer Certifikathemligheter&.
  3. Välj Ny klienthemlighet.
  4. Ange en beskrivning av klienthemligheten i rutan Beskrivning . Till exempel clientsecret1.
  5. Under Upphör att gälla väljer du en varaktighet för vilken hemligheten är giltig och väljer sedan Lägg till.
  6. Registrera hemlighetens värde för användning i klientprogramkoden. Det här hemliga värdet visas aldrig igen när du har lämnat den här sidan. Du använder det här värdet som programhemlighet i programmets kod.

Steg 2.5: Bevilja API-behörigheter till webbappen

Följ dessa steg för att ge din app (app-ID: 1) behörighet:

  1. Välj Appregistreringar och välj sedan den app som du skapade (app-ID: 1).

  2. Under Hantera väljer du API-behörigheter.

  3. Under Konfigurerade behörigheter väljer du Lägg till en behörighet.

  4. Välj fliken Mina API:er .

  5. Välj det API (app-ID: 2) som webbprogrammet ska beviljas åtkomst till. Ange till exempel my-api1.

  6. Under Behörighet expanderar du aktiviteter och väljer sedan de omfång som du definierade tidigare (till exempel tasks.read och tasks.write).

  7. Välj Lägg till behörigheter.

  8. Välj Bevilja administratörsmedgivande för< ditt klientnamn>.

  9. Välj Ja.

  10. Välj Uppdatera och kontrollera sedan att Beviljad för ... visas under Status för båda omfången.

  11. I listan Konfigurerade behörigheter väljer du ditt omfång och kopierar sedan det fullständiga omfångsnamnet.

    Screenshot of the configured permissions pane, showing that read access permissions are granted.

Steg 3: Hämta exempelkoden för webbappen

Det här exemplet visar hur ett webbprogram kan använda Azure AD B2C för registrering och inloggning av användare. Sedan hämtar appen en åtkomsttoken och anropar ett skyddat webb-API.

Om du vill hämta exempelkoden för webbappen kan du göra något av följande:

  • Ladda ned en zip-fil. Du extraherar zip-filen för att hämta exempelwebbappen.

  • Klona exemplet från GitHub genom att köra följande kommando:

    git clone https://github.com/Azure-Samples/active-directory-b2c-msal-node-sign-in-sign-out-webapp.git
    

Steg 3.1: Installera appberoenden

  1. Öppna ett konsolfönster och ändra till katalogen som innehåller Node.js-exempelappen. Till exempel:

        cd active-directory-b2c-msal-node-sign-in-sign-out-webapp/call-protected-api
    
  2. Kör följande kommandon för att installera appberoenden:

        npm install && npm update
    

Steg 3.2: Konfigurera exempelwebbappen

Öppna webbappen i en kodredigerare, till exempel Visual Studio Code. Öppna filen under call-protected-api mappen .env . Den här filen innehåller information om din Azure AD B2C-identitetsprovider. Uppdatera följande appinställningar:

Tangent Värde
APP_CLIENT_ID Program-ID :t (klient) för webbappen som du registrerade i steg 2.3.
APP_CLIENT_SECRET Klienthemlighetsvärdet för webbappen som du skapade i steg 2.4
SIGN_UP_SIGN_IN_POLICY_AUTHORITY Behörigheten Logga in och registrera användarflöde för användarflödet som du skapade i steg 1 , till exempel https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<sign-in-sign-up-user-flow-name>. Ersätt <your-tenant-name> med namnet på din klientorganisation och <sign-in-sign-up-user-flow-name> med namnet på ditt inloggnings- och registreringsanvändarflöde, B2C_1_susitill exempel . Lär dig hur du hämtar ditt klientnamn.
AUTHORITY_DOMAIN Azure AD B2C-utfärdardomänen, till exempel https://<your-tenant-name>.b2clogin.com. Ersätt <your-tenant-name> med namnet på klientorganisationen.
APP_REDIRECT_URI Programomdirigerings-URI:n där Azure AD B2C returnerar autentiseringssvar (token). Den matchar den omdirigerings-URI som du angav när du registrerade din app i Azure-portalen. Den här URL:en måste vara offentligt tillgänglig. Lämna värdet som det är.
LOGOUT_ENDPOINT Azure AD B2C-utloggningsslutpunkten, till exempel https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<sign-in-sign-up-user-flow-name>/oauth2/v2.0/logout?post_logout_redirect_uri=http://localhost:3000. Ersätt <your-tenant-name> med namnet på din klientorganisation och <sign-in-sign-up-user-flow-name> med namnet på ditt inloggnings- och registreringsanvändarflöde, B2C_1_susitill exempel .

Efter uppdateringen bör den slutliga konfigurationsfilen se ut ungefär som i följande exempel:

SERVER_PORT=3000
#web apps client ID
APP_CLIENT_ID=<You app client ID here>
#session secret
SESSION_SECRET=sessionSecretHere
#web app client secret
APP_CLIENT_SECRET=<Your app client secret here>
#tenant name
TENANT_NAME=<your-tenant-name>
#B2C sign up and sign in user flow/policy name and authority
SIGN_UP_SIGN_IN_POLICY_AUTHORITY=https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<sign-in-sign-up-user-flow-name>
AUTHORITY_DOMAIN=https://<your-tenant-name>.b2clogin.com
#client redorect url
APP_REDIRECT_URI=http://localhost:3000/redirect
LOGOUT_ENDPOINT=https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<sign-in-sign-up-user-flow-name>/oauth2/v2.0/logout?post_logout_redirect_uri=http://localhost:3000

Steg 4: Hämta exempelkoden för webb-API:et

Nu när webb-API:et har registrerats och du har definierat dess omfång konfigurerar du webb-API-koden så att den fungerar med din Azure AD B2C-klientorganisation.

Om du vill hämta exempelkoden för webb-API:et gör du något av följande:

Steg 4.1: Uppdatera webb-API:et

  1. Öppna filen i kodredigeraren config.json .

  2. Ändra variabelvärdena med användarflödet och programregistreringen som du skapade tidigare:

    • För tenantNameanvänder du namnet på klientorganisationens namn , till exempel fabrikamb2c.

    • För clientIDanvänder du program-ID :t (klient) för webb-API:et som du skapade i steg 2.1.

    • För policyNameanvänder du namnet på användarflödet Sing in och sign up som du skapade i steg 1 , till exempel B2C_1_susi.

    Efter uppdateringen bör koden se ut ungefär som i följande exempel:

    config.json:

    {
        "credentials": {
            "tenantName": "fabrikamb2c",
            "clientID": "93733604-cc77-4a3c-a604-87084dd55348"
        },
        "policies": {
            "policyName": "B2C_1_susi"
        },
        "resource": {
            "scope": ["tasks.read"]
        },
        "metadata": {
            "authority": "login.microsoftonline.com",
            "discovery": ".well-known/openid-configuration",
            "version": "v2.0"
        },
        "settings": {
            "isB2C": true,
            "validateIssuer": true,
            "passReqToCallback": false,
            "loggingLevel": "info"
        }
    }
    

Steg 4.2: Installera appberoenden

  1. Öppna ett konsolfönster och ändra till katalogen som innehåller node.js-webb-API-exemplet. Till exempel:

    cd active-directory-b2c-javascript-nodejs-webapi
    
  2. Kör följande kommandon:

    npm install && npm update
    

Steg 5: Kör webbappen och API:et

Nu är du redo att testa webbprogrammets begränsade åtkomst till webb-API:et. Kör både Node.js-webb-API:et och exempelwebbprogrammet på den lokala datorn.

  1. I terminalen går du till exempelwebb-API:et och kör start för Node.js-webb-API-servern. Till exempel: '

    cd active-directory-b2c-javascript-nodejs-webapi
    node index.js
    

    Konsolfönstret visar portnumret där programmet finns.

    Listening on port 5000...
    
  2. I en annan terminalinstans navigerar du till exempelwebbappen och kör starta Nod.js-webbappservern. Till exempel:

        cd active-directory-b2c-msal-node-sign-in-sign-out-webapp/call-protected-api
        node index.js
    

    Konsolfönstret visar portnumret där programmet finns.

    Msal Node Auth Code Sample app listening on port !3000
    
  3. Gå till http://localhost:3000 i webbläsaren. Du bör se sidan med två knappar, Logga in för att anropa SKYDDAT API och Eller anropa ANONYMT API.

    Web page for sign in to call protected A P I.

  4. Om du vill anropa det anonyma API:et väljer du Eller anropar API:et ANONYM. API:et svarar med JSON-objekt med date nyckel, till exempel:

        {"date":"2022-01-27T14:21:22.681Z"}
    

    Det anonyma API:et är en oskyddad slutpunkt i webb-API:et. Du behöver ingen åtkomsttoken för att komma åt den.

  5. Om du vill anropa den skyddade API-slutpunkten väljer du knappen Logga in för att anropa KNAPPEN SKYDDAT API . Du uppmanas att logga in.

  6. Ange dina inloggningsuppgifter, till exempel e-postadress och lösenord. Om du inte har något konto väljer du Registrera dig nu för att skapa ett konto. När du har loggat in eller registrerat dig bör du se följande sida med knappen Anropa skyddat API .

    Web page for signed to call protected A P I.

  7. Om du vill anropa det skyddade API:et väljer du knappen Anropa DET SKYDDADE API :et. API:et svarar med JSON-objekt med en name nyckel vars värde är ditt kontos efternamn, till exempel:

        {"name": "User 1"} 
    

Nästa steg

Lär dig hur du aktiverar autentisering i ditt eget webb-API med hjälp av Azure AD B2C