Een Azure API Management-API beveiligen met Azure AD B2C

Leer hoe u de toegang tot uw Azure API Management-API beperkt tot clients die zijn geverifieerd met Azure Active Directory B2C (Azure AD B2C). Volg de instructies in dit artikel om een binnenkomend beleid te maken en te testen in Azure API Management waarmee alleen de toegang wordt beperkt tot aanvragen die een geldig azure AD B2C-toegangstoken bevatten.

Vereisten

Voordat u begint, moet u ervoor zorgen dat u over de volgende resources beschikt:

Azure AD B2C-toepassings-id ophalen

Wanneer u een API in Azure API Management beveiligt met Azure AD B2C, hebt u verschillende waarden nodig voor het inkomende beleid dat u in Azure API Management maakt. Noteer eerst de toepassings-id van een toepassing die u eerder hebt gemaakt in uw Azure AD B2C-tenant. Als u de toepassing gebruikt die u hebt gemaakt om aan de vereisten te voldoen, gebruikt u de toepassings-id voor webapp1.

Als u een toepassing wilt registreren in uw Azure AD B2C-tenant, kunt u onze nieuwe, geïntegreerde ervaring voor App-registraties of onze verouderde toepassingen gebruiken. Meer informatie over de nieuwe registratie-ervaring.

  1. Meld u aan bij de Azure-portal.
  2. Als u toegang hebt tot meerdere tenants, selecteert u het pictogram Instellingen in het bovenste menu om over te schakelen naar uw Azure AD B2C-tenant in het menu Mappen en abonnementen.
  3. Selecteer Azure AD B2C in het linkerdeelvenster. U kunt ook Alle services selecteren en vervolgens Azure AD B2C zoeken en selecteren.
  4. Selecteer App-registraties en selecteer vervolgens het tabblad Toepassingen in eigendom.
  5. Noteer de waarde in de kolom Toepassings-id (client) voor webapp1 of voor een andere toepassing die u eerder hebt gemaakt.

Een eindpunt voor tokenverlener ophalen

Haal vervolgens de bekende configuratie-URL op voor een van uw Azure AD B2C-gebruikersstromen. U hebt ook de eindpunt-URI van de tokenverlener nodig die u wilt ondersteunen in Azure API Management.

  1. Ga in Azure Portal naar uw Azure AD B2C-tenant.

  2. Selecteer onder BeleidGebruikersstromen.

  3. Selecteer een bestaand beleid (bijvoorbeeld B2C_1_signupsignin1) en selecteer vervolgens Gebruikersstroom uitvoeren.

  4. Noteer de URL in de hyperlink die wordt weergegeven onder de kop Gebruikersstroom uitvoeren boven aan de pagina. Deze URL is de OpenID Verbinding maken bekende detectie-eindpunt voor de gebruikersstroom en u gebruikt deze in de volgende sectie wanneer u het binnenkomende beleid in Azure API Management configureert.

    Screenshot of the well-known URI hyperlink on the

  5. Selecteer de hyperlink om naar de OpenID Verbinding maken bekende configuratiepagina te gaan.

  6. Noteer issuer de waarde op de pagina die wordt geopend in uw browser. Bijvoorbeeld:

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

    U gebruikt deze waarde in de volgende sectie wanneer u uw API configureert in Azure API Management.

U moet nu twee URL's hebben vastgelegd voor gebruik in de volgende sectie: de OpenID Verbinding maken bekende configuratie-eindpunt-URL en de URI van de verlener. Bijvoorbeeld:

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/

Het binnenkomende beleid configureren in Azure API Management

U bent nu klaar om het binnenkomende beleid toe te voegen in Azure API Management waarmee API-aanroepen worden gevalideerd. Door een JSON-validatiebeleid (JWT) toe te voegen waarmee de doelgroep en verlener in een toegangstoken worden geverifieerd, kunt u ervoor zorgen dat alleen API-aanroepen met een geldig token worden geaccepteerd.

  1. Ga in Azure Portal naar uw Azure API Management-exemplaar.

  2. Selecteer API's.

  3. Selecteer de API die u wilt beveiligen met Azure AD B2C.

  4. Selecteer het tabblad Ontwerpen.

  5. Selecteer</>om de beleidscode-editor te openen onder Binnenkomende verwerking.

  6. Plaats de volgende <validate-jwt> tag in het <inbound> beleid en ga als volgt te werk:

    a. Werk de url waarde in het <openid-config> element bij met de bekende configuratie-URL van uw beleid.
    b. Werk het <audience> element bij met de toepassings-id van de toepassing die u eerder hebt gemaakt in uw B2C-tenant (bijvoorbeeld webapp1).
    c. Werk het <issuer> element bij met het eindpunt van de tokenverlener dat u eerder hebt vastgelegd.

    <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>
    

Beveiligde API-toegang valideren

Om ervoor te zorgen dat alleen geverifieerde bellers toegang hebben tot uw API, kunt u uw Azure API Management-configuratie valideren door de API aan te roepen met Postman.

Als u de API wilt aanroepen, hebt u zowel een toegangstoken nodig dat is uitgegeven door Azure AD B2C als een Azure API Management-abonnementssleutel.

Een toegangstoken opvragen

U hebt eerst een token nodig dat is uitgegeven door Azure AD B2C voor gebruik in de Authorization header in Postman. U kunt er een krijgen met behulp van de functie Nu uitvoeren van de gebruikersstroom voor registreren/aanmelden die u hebt gemaakt als een van de vereisten.

  1. Ga in Azure Portal naar uw Azure AD B2C-tenant.

  2. Selecteer onder BeleidGebruikersstromen.

  3. Selecteer een bestaande gebruikersstroom voor registreren/aanmelden (bijvoorbeeld B2C_1_signupsignin1).

  4. Selecteer voor Toepassing webapp1.

  5. Selecteer voor antwoord-URL de optie https://jwt.ms.

  6. Selecteer Gebruikersstroom uitvoeren.

    Screenshot of the

  7. Voltooi het aanmeldingsproces. U moet worden omgeleid naar https://jwt.ms.

  8. Noteer de gecodeerde tokenwaarde die wordt weergegeven in uw browser. U gebruikt deze tokenwaarde voor de autorisatieheader in Postman.

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

Een API-abonnementssleutel ophalen

Een clienttoepassing (in dit geval Postman) die een gepubliceerde API aanroept, moet een geldige API Management-abonnementssleutel bevatten in de HTTP-aanvragen voor de API. Een abonnementssleutel ophalen die moet worden opgenomen in uw Postman HTTP-aanvraag:

  1. Ga in Azure Portal naar uw Azure API Management-service-exemplaar.
  2. Selecteer Abonnementen.
  3. Selecteer het beletselteken (...) naast Product: Onbeperkt en selecteer vervolgens Sleutels weergeven/verbergen.
  4. Noteer de primaire sleutel voor het product. U gebruikt deze sleutel voor de Ocp-Apim-Subscription-Key header in uw HTTP-aanvraag in Postman.

Screenshot of the

Een beveiligde API-aanroep testen

Nu het toegangstoken en de azure API Management-abonnementssleutel zijn vastgelegd, kunt u nu testen of u beveiligde toegang tot de API correct hebt geconfigureerd.

  1. Maak een nieuwe GET aanvraag in Postman. Geef voor de aanvraag-URL het eindpunt van de lijst met sprekers op van de API die u hebt gepubliceerd als een van de vereisten. Bijvoorbeeld:

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

  2. Voeg vervolgens de volgende headers toe:

    Sleutel Waarde
    Authorization De gecodeerde tokenwaarde die u eerder hebt vastgelegd, voorafgegaan door Bearer (inclusief de spatie na Bearer)
    Ocp-Apim-Subscription-Key De Azure API Management-abonnementssleutel die u eerder hebt vastgelegd.

    De URL en headers van uw GET-aanvraag moeten er ongeveer uitzien als in de volgende afbeelding:

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

  3. Selecteer in Postman de knop Verzenden om de aanvraag uit te voeren. Als u alles correct hebt geconfigureerd, moet u een JSON-antwoord krijgen met een verzameling sprekers voor vergaderingen (hier afgekapt):

    {
      "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"
              }
            ]
          },
    [...]
    

Een onveilige API-aanroep testen

Nu u een geslaagde aanvraag hebt ingediend, test u de foutcase om ervoor te zorgen dat aanroepen naar uw API met een ongeldig token worden geweigerd zoals verwacht. Een manier om de test uit te voeren, is door een paar tekens in de tokenwaarde toe te voegen of te wijzigen en vervolgens dezelfde GET aanvraag uit te voeren als voorheen.

  1. Voeg verschillende tekens toe aan de tokenwaarde om een ongeldig token te simuleren. U kunt bijvoorbeeld 'ONGELDIG' toevoegen aan de tokenwaarde, zoals hier wordt weergegeven:

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

  2. Selecteer de knop Verzenden om de aanvraag uit te voeren. Met een ongeldig token is het verwachte resultaat een 401 niet-geautoriseerde statuscode:

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

Als u een 401 statuscode ziet, hebt u geverifieerd dat alleen aanroepers met een geldig toegangstoken dat is uitgegeven door Azure AD B2C, geslaagde aanvragen kunnen indienen bij uw Azure API Management-API.

Ondersteuning voor meerdere toepassingen en verleners

Verschillende toepassingen communiceren doorgaans met één REST API. Als u wilt dat uw API tokens accepteert die zijn bedoeld voor meerdere toepassingen, voegt u de toepassings-id's toe aan het <audiences> element in het binnenkomende Azure API Management-beleid.

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

Als u meerdere tokenverleners wilt ondersteunen, voegt u de eindpunt-URI's toe aan het <issuers> element in het binnenkomende Azure API Management-beleid.

<!-- 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>

Migreren naar b2clogin.com

Als u een Azure API ManagementM-API hebt die tokens valideert die zijn uitgegeven door het verouderde login.microsoftonline.com eindpunt, moet u de API en de toepassingen die deze aanroepen, migreren om tokens te gebruiken die zijn uitgegeven door b2clogin.com.

U kunt dit algemene proces volgen om een gefaseerde migratie uit te voeren:

  1. Voeg ondersteuning toe aan uw binnenkomende Azure API Management-beleid voor tokens die zijn uitgegeven door zowel b2clogin.com als login.microsoftonline.com.
  2. Werk uw toepassingen één voor één bij om tokens te verkrijgen van het b2clogin.com-eindpunt.
  3. Nadat al uw toepassingen tokens van b2clogin.com correct verkrijgen, verwijdert u ondersteuning voor login.microsoftonline.com uitgegeven tokens uit de API.

Het volgende voorbeeld van inkomend Azure API Management-beleid laat zien hoe u tokens accepteert die zijn uitgegeven door zowel b2clogin.com als login.microsoftonline.com. Daarnaast ondersteunt het beleid API-aanvragen van twee toepassingen.

<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>

Volgende stappen

Zie de naslagindex voor Azure API Management-beleid voor meer informatie over Azure API Management-beleid.

Zie Een OWIN-web-API migreren naar b2clogin.com voor informatie over het migreren van web-API's op basis van OWIN en hun toepassingen naar b2clogin.com.