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:
- Een Azure AD B2C-tenant
- Een toepassing die is geregistreerd in uw tenant
- Gebruikersstromen die in uw tenant worden gemaakt
- Een gepubliceerde API in Azure API Management
- (Optioneel) Een Postman-platform om beveiligde toegang te testen
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.
- Meld u aan bij de Azure-portal.
- 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.
- Selecteer Azure AD B2C in het linkerdeelvenster. U kunt ook Alle services selecteren en vervolgens Azure AD B2C zoeken en selecteren.
- Selecteer App-registraties en selecteer vervolgens het tabblad Toepassingen in eigendom.
- 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.
Ga in Azure Portal naar uw Azure AD B2C-tenant.
Selecteer onder Beleid Gebruikersstromen.
Selecteer een bestaand beleid (bijvoorbeeld B2C_1_signupsignin1) en selecteer vervolgens Gebruikersstroom uitvoeren.
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.
Selecteer de hyperlink om naar de OpenID Verbinding maken bekende configuratiepagina te gaan.
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.
Ga in Azure Portal naar uw Azure API Management-exemplaar.
Selecteer API's.
Selecteer de API die u wilt beveiligen met Azure AD B2C.
Selecteer het tabblad Ontwerpen.
Selecteer</>om de beleidscode-editor te openen onder Binnenkomende verwerking.
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.
Ga in Azure Portal naar uw Azure AD B2C-tenant.
Selecteer onder Beleid Gebruikersstromen.
Selecteer een bestaande gebruikersstroom voor registreren/aanmelden (bijvoorbeeld B2C_1_signupsignin1).
Selecteer voor Toepassing webapp1.
Selecteer voor antwoord-URL de optie
https://jwt.ms
.Selecteer Gebruikersstroom uitvoeren.
Voltooi het aanmeldingsproces. U moet worden omgeleid naar
https://jwt.ms
.Noteer de gecodeerde tokenwaarde die wordt weergegeven in uw browser. U gebruikt deze tokenwaarde voor de autorisatieheader in Postman.
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:
- Ga in Azure Portal naar uw Azure API Management-service-exemplaar.
- Selecteer Abonnementen.
- Selecteer het beletselteken (...) naast Product: Onbeperkt en selecteer vervolgens Sleutels weergeven/verbergen.
- Noteer de primaire sleutel voor het product. U gebruikt deze sleutel voor de
Ocp-Apim-Subscription-Key
header in uw HTTP-aanvraag in Postman.
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.
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
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:
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.
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:
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:
- Voeg ondersteuning toe aan uw binnenkomende Azure API Management-beleid voor tokens die zijn uitgegeven door zowel b2clogin.com als login.microsoftonline.com.
- Werk uw toepassingen één voor één bij om tokens te verkrijgen van het b2clogin.com-eindpunt.
- 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.