Skydda ett Azure API Management-API med Azure AD B2C

Lär dig hur du begränsar åtkomsten till ditt Azure API Management API till klienter som har autentiserats med Azure Active Directory B2C (Azure AD B2C). Följ anvisningarna i den här artikeln för att skapa och testa en inkommande princip i Azure API Management som begränsar åtkomsten till endast de begäranden som innehåller en giltig Azure AD B2C-utfärdad åtkomsttoken.

Förutsättningar

Innan du börjar kontrollerar du att du har följande resurser på plats:

Hämta Azure AD B2C-program-ID

När du skyddar ett API i Azure API Management med Azure AD B2C behöver du flera värden för den inkommande principen som du skapar i Azure API Management. Registrera först program-ID:t för ett program som du tidigare har skapat i din Azure AD B2C-klientorganisation. Om du använder programmet som du skapade för att uppfylla kraven använder du program-ID:t för webapp1.

Om du vill registrera ett program i din Azure AD B2C-klientorganisation kan du använda vår nya, enhetliga Appregistreringar upplevelse eller vår äldre programupplevelse. Läs mer om den nya registreringsupplevelsen.

  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. Välj Azure AD B2C i den vänstra rutan. Du kan också välja Alla tjänster och sedan söka efter och välja Azure AD B2C.
  4. Välj Appregistreringar och välj sedan fliken Ägda program.
  5. Registrera värdet i kolumnen Program -ID (klient) för webapp1 eller för ett annat program som du tidigare har skapat.

Hämta en slutpunkt för token utfärdare

Hämta sedan den välkända konfigurations-URL:en för ett av dina Azure AD B2C-användarflöden. Du behöver också den slutpunkts-URI för token utfärdare som du vill stödja i Azure API Management.

  1. I Azure-portalen går du till din Azure AD B2C-klientorganisation.

  2. Under Principer väljer du Användarflöden.

  3. Välj en befintlig princip (till exempel B2C_1_signupsignin1) och välj sedan Kör användarflöde.

  4. Registrera URL:en i hyperlänken som visas under rubriken Kör användarflöde längst upp på sidan. Den här URL:en är OpenID-Anslut välkänd identifieringsslutpunkt för användarflödet, och du använder den i nästa avsnitt när du konfigurerar den inkommande principen i Azure API Management.

    Screenshot of the well-known URI hyperlink on the

  5. Välj hyperlänken för att gå till sidan OpenID Anslut välkänd konfiguration.

  6. På sidan som öppnas i webbläsaren registrerar du värdet issuer . Till exempel:

    https://<tenant-name>.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

    Du använder det här värdet i nästa avsnitt när du konfigurerar ditt API i Azure API Management.

Du bör nu ha två URL:er registrerade för användning i nästa avsnitt: OpenID Anslut välkända url för konfigurationsslutpunkten och utfärdarens URI. Till exempel:

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration
https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/

Konfigurera inkommande princip i Azure API Management

Nu är du redo att lägga till den inkommande principen i Azure API Management som validerar API-anrop. Genom att lägga till en JSON-verifieringsprincip (JWT) som verifierar målgruppen och utfärdaren i en åtkomsttoken kan du se till att endast API-anrop med en giltig token godkänns.

  1. I Azure-portalen går du till din Azure API Management-instans.

  2. Välj API:er.

  3. Välj det API som du vill skydda med Azure AD B2C.

  4. Välj fliken Design.

  5. Under Inkommande bearbetning väljer du </> för att öppna principkodredigeraren.

  6. Placera följande <validate-jwt> tagg i <inbound> principen och gör sedan följande:

    a. url Uppdatera värdet i -elementet <openid-config> med principens välkända konfigurations-URL.
    b. Uppdatera elementet <audience> med program-ID:t för det program som du skapade tidigare i B2C-klientorganisationen (till exempel webapp1).
    c. Uppdatera elementet <issuer> med slutpunkten för token utfärdaren som du registrerade tidigare.

    <policies>
        <inbound>
            <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
                <openid-config url="https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
                <audiences>
                    <audience>44444444-0000-0000-0000-444444444444</audience>
                </audiences>
                <issuers>
                    <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
                </issuers>
            </validate-jwt>
            <base />
        </inbound>
        <backend> <base /> </backend>
        <outbound> <base /> </outbound>
        <on-error> <base /> </on-error>
    </policies>
    

Verifiera säker API-åtkomst

För att säkerställa att endast autentiserade anropare kan komma åt ditt API kan du verifiera din Azure API Management-konfiguration genom att anropa API:et med Postman.

För att anropa API:et behöver du både en åtkomsttoken som utfärdas av Azure AD B2C och en Azure API Management-prenumerationsnyckel.

Hämta en åtkomsttoken

Du behöver först en token som utfärdas av Azure AD B2C för att kunna använda i Authorization rubriken i Postman. Du kan få en genom att använda funktionen Kör nu i det användarflöde för registrering/inloggning som du skapade som en av förhandskraven.

  1. I Azure-portalen går du till din Azure AD B2C-klientorganisation.

  2. Under Principer väljer du Användarflöden.

  3. Välj ett befintligt användarflöde för registrering/inloggning (till exempel B2C_1_signupsignin1).

  4. För Program väljer du webapp1.

  5. För Svars-URL väljer du https://jwt.ms.

  6. Välja Kör användarflödet.

    Screenshot of the

  7. Slutför inloggningsprocessen. Du bör omdirigeras till https://jwt.ms.

  8. Registrera det kodade tokenvärdet som visas i webbläsaren. Du använder det här tokenvärdet för auktoriseringshuvudet i Postman.

    Screenshot of the encoded token value displayed on jwt.ms.

Hämta en API-prenumerationsnyckel

Ett klientprogram (i det här fallet Postman) som anropar ett publicerat API måste innehålla en giltig API Management-prenumerationsnyckel i sina HTTP-begäranden till API:et. Så här hämtar du en prenumerationsnyckel som ska inkluderas i Din Postman HTTP-begäran:

  1. I Azure-portalen går du till din Azure API Management-tjänstinstans.
  2. Välj Prenumerationer.
  3. Välj ellipsen (...) bredvid Produkt: Obegränsad och välj sedan Visa/dölj nycklar.
  4. Registrera produktens primärnyckel . Du använder den här nyckeln för Ocp-Apim-Subscription-Key rubriken i DIN HTTP-begäran i Postman.

Screenshot of the

Testa ett säkert API-anrop

När åtkomsttoken och Azure API Management-prenumerationsnyckeln har registrerats är du nu redo att testa om du har konfigurerat säker åtkomst till API:et korrekt.

  1. Skapa en ny GET begäran i Postman. För begärans-URL anger du slutpunkten för talarlistan för det API som du publicerade som en av förhandskraven. Till exempel:

    https://contosoapim.azure-api.net/conference/speakers

  2. Lägg sedan till följande rubriker:

    Tangent Värde
    Authorization Det kodade tokenvärdet som du registrerade tidigare, prefixet med Bearer (inkludera utrymmet efter "Bearer")
    Ocp-Apim-Subscription-Key Prenumerationsnyckeln för Azure API Management som du registrerade tidigare.

    URL:en och rubrikerna för GET-begäran bör se ut ungefär som de som visas i följande bild:

    Screenshot of the Postman UI showing the GET request URL and headers.

  3. I Postman väljer du knappen Skicka för att köra begäran. Om du har konfigurerat allt korrekt bör du få ett JSON-svar med en samling konferenstalare (visas här, trunkerade):

    {
      "collection": {
        "version": "1.0",
        "href": "https://conferenceapi.azurewebsites.net:443/speakers",
        "links": [],
        "items": [
          {
            "href": "https://conferenceapi.azurewebsites.net/speaker/1",
            "data": [
              {
                "name": "Name",
                "value": "Scott Guthrie"
              }
            ],
            "links": [
              {
                "rel": "http://tavis.net/rels/sessions",
                "href": "https://conferenceapi.azurewebsites.net/speaker/1/sessions"
              }
            ]
          },
    [...]
    

Testa ett osäkert API-anrop

Nu när du har gjort en lyckad begäran testar du felfallet för att säkerställa att anrop till ditt API med en ogiltig token avvisas som förväntat. Ett sätt att utföra testet är att lägga till eller ändra några tecken i tokenvärdet och sedan köra samma GET begäran som tidigare.

  1. Lägg till flera tecken i tokenvärdet för att simulera en ogiltig token. Du kan till exempel lägga till "INVALID" i tokenvärdet, som du ser här:

    Screenshot of the Headers section of Postman UI showing the string INVALID added to token.

  2. Välj knappen Skicka för att köra begäran. Med en ogiltig token är det förväntade resultatet en 401 obehörig statuskod:

    {
        "statusCode": 401,
        "message": "Unauthorized. Access token is missing or invalid."
    }
    

Om du ser en 401 statuskod har du verifierat att endast anropare med en giltig åtkomsttoken som utfärdats av Azure AD B2C kan göra lyckade begäranden till ditt Azure API Management API.

Stöd för flera program och utfärdare

Flera program interagerar vanligtvis med ett enda REST API. Om du vill att ditt API ska kunna acceptera token som är avsedda för flera program lägger du till deras program-ID:n i elementet <audiences> i azure API Management-principen för inkommande trafik.

<!-- Accept tokens intended for these recipient applications -->
<audiences>
    <audience>44444444-0000-0000-0000-444444444444</audience>
    <audience>66666666-0000-0000-0000-666666666666</audience>
</audiences>

För att stödja flera tokenutfärdare lägger du på samma sätt till deras slutpunkts-URI:er i elementet <issuers> i azure API Management-principen för inkommande trafik.

<!-- Accept tokens from multiple issuers -->
<issuers>
    <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
    <issuer>https://login.microsoftonline.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
</issuers>

Migrera till b2clogin.com

Om du har ett Azure API ManagementM-API som validerar token som utfärdats av den äldre login.microsoftonline.com slutpunkten bör du migrera API:et och de program som anropar det för att använda token som utfärdats av b2clogin.com.

Du kan följa den här allmänna processen för att utföra en stegvis migrering:

  1. Lägg till stöd i din inkommande princip för Azure API Management för token som utfärdats av både b2clogin.com och login.microsoftonline.com.
  2. Uppdatera dina program en i taget för att hämta token från b2clogin.com slutpunkten.
  3. När alla dina program har hämtat token från b2clogin.com tar du bort stödet för login.microsoftonline.com-utfärdade token från API:et.

I följande exempel illustrerar Azure API Management inkommande princip hur du accepterar token som utfärdas av både b2clogin.com och login.microsoftonline.com. Dessutom stöder principen API-begäranden från två program.

<policies>
    <inbound>
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
            <openid-config url="https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
            <audiences>
                <audience>44444444-0000-0000-0000-444444444444</audience>
                <audience>66666666-0000-0000-0000-666666666666</audience>
            </audiences>
            <issuers>
                <issuer>https://login.microsoftonline.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
                <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
            </issuers>
        </validate-jwt>
        <base />
    </inbound>
    <backend> <base /> </backend>
    <outbound> <base /> </outbound>
    <on-error> <base /> </on-error>
</policies>

Nästa steg

Mer information om Azure API Management-principer finns i Referensindex för Azure API Management-principer.

Information om hur du migrerar OWIN-baserade webb-API:er och deras program till b2clogin.com finns i Migrera ett OWIN-baserat webb-API till b2clogin.com.