Zabezpečení rozhraní API služby Azure API Management pomocí Azure AD B2C
Zjistěte, jak omezit přístup k rozhraní API služby Azure API Management na klienty, kteří se ověřili pomocí Azure Active Directory B2C (Azure AD B2C). Postupujte podle pokynů v tomto článku a vytvořte a otestujte příchozí zásady ve službě Azure API Management, které omezují přístup jenom na požadavky, které obsahují platný přístupový token vydaný službou Azure AD B2C.
Předpoklady
Než začnete, ujistěte se, že máte splněné následující prostředky:
- Tenant Azure AD B2C
- Aplikace zaregistrovaná ve vašem tenantovi
- Toky uživatelů vytvořené ve vašem tenantovi
- Publikované rozhraní API ve službě Azure API Management
- (Volitelné) Platforma Postman pro testování zabezpečeného přístupu
Získání ID aplikace Azure AD B2C
Při zabezpečení rozhraní API ve službě Azure API Management pomocí Azure AD B2C potřebujete několik hodnot pro příchozí zásady , které vytvoříte ve službě Azure API Management. Nejprve si poznamenejte ID aplikace, kterou jste vytvořili v tenantovi Azure AD B2C. Pokud používáte aplikaci, kterou jste vytvořili pro splnění požadavků, použijte ID aplikace pro webapp1.
Pokud chcete zaregistrovat aplikaci ve vašem tenantovi Azure AD B2C, můžete použít nové jednotné prostředí Registrace aplikací nebo starší prostředí aplikací. Přečtěte si další informace o novém prostředí registrací.
- Přihlaste se k portálu Azure.
- Pokud máte přístup k více tenantům, v horní nabídce vyberte ikonu Nastavení a v nabídce Adresáře a předplatná přepněte do svého tenanta Azure AD B2C.
- V levém podokně vyberte Azure AD B2C. Případně můžete vybrat všechny služby a pak vyhledat a vybrat Azure AD B2C.
- Vyberte Registrace aplikací a pak vyberte kartu Vlastněné aplikace.
- Poznamenejte si hodnotu ve sloupci ID aplikace (klienta) pro webovou aplikaci1 nebo pro jinou aplikaci, kterou jste vytvořili dříve.
Získání koncového bodu vystavitele tokenu
Dále získejte známou adresu URL konfigurace pro některý z vašich toků uživatelů Azure AD B2C. Potřebujete také identifikátor URI koncového bodu vystavitele tokenu, který chcete podporovat ve službě Azure API Management.
Na webu Azure Portal přejděte do tenanta Azure AD B2C.
V části Zásady vyberte Toky uživatelů.
Vyberte existující zásadu (například B2C_1_signupsignin1) a pak vyberte Spustit tok uživatele.
Zaznamenejte adresu URL v hypertextovém odkazu, který se zobrazí pod nadpisem Tok spuštění uživatele v horní části stránky. Tato adresa URL je openID Připojení dobře známý koncový bod zjišťování pro tok uživatele a použijete ho v další části při konfiguraci příchozích zásad ve službě Azure API Management.
Výběrem hypertextového odkazu přejděte na stránku OpenID Připojení dobře známé konfigurační stránce.
Na stránce, která se otevře v prohlížeči, si poznamenejte
issuer
hodnotu. Příklad:https://<tenant-name>.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/
Tuto hodnotu použijete v další části při konfiguraci rozhraní API ve službě Azure API Management.
V další části byste teď měli mít zaznamenané dvě adresy URL: OpenID Připojení dobře známou adresu URL koncového bodu konfigurace a identifikátor URI vystavitele. Příklad:
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/
Konfigurace příchozích zásad ve službě Azure API Management
Teď jste připraveni přidat příchozí zásady ve službě Azure API Management, která ověřuje volání rozhraní API. Přidáním zásady ověřování webového tokenu JSON (JWT), která ověřuje cílovou skupinu a vystavitele v přístupovém tokenu, můžete zajistit, aby se akceptovala pouze volání rozhraní API s platným tokenem.
Na webu Azure Portal přejděte do vaší instance služby Azure API Management.
Vyberte Rozhraní API.
Vyberte rozhraní API, které chcete zabezpečit pomocí Azure AD B2C.
Vyberte kartu Návrh.
V části Zpracování příchozích dat vyberte </> a otevřete editor kódu zásad.
Do zásad umístěte následující
<validate-jwt>
značku<inbound>
a pak udělejte toto:a.
url
Aktualizujte hodnotu v elementu<openid-config>
pomocí známé konfigurační adresy URL zásad.
b.<audience>
Aktualizujte prvek pomocí ID aplikace, kterou jste vytvořili dříve v tenantovi B2C (například webapp1).
c.<issuer>
Aktualizujte prvek koncovým bodem vystavitele tokenu, který jste si poznamenali dříve.<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>
Ověření zabezpečeného přístupu k rozhraní API
Pokud chcete zajistit, aby k vašemu rozhraní API měli přístup jenom ověření volající, můžete ověřit konfiguraci služby Azure API Management voláním rozhraní API pomocí nástroje Postman.
K volání rozhraní API potřebujete přístupový token vydaný službou Azure AD B2C i klíč předplatného služby Azure API Management.
Získání přístupového tokenu
Nejdřív potřebujete token vydaný Službou Azure AD B2C, který použije v Authorization
hlavičce v Postmanu. Můžete ho získat pomocí funkce Spustit teď v toku uživatele pro registraci nebo přihlášení, který jste vytvořili jako jeden z požadavků.
Na webu Azure Portal přejděte do tenanta Azure AD B2C.
V části Zásady vyberte Toky uživatelů.
Vyberte stávající tok uživatele pro registraci nebo přihlášení (například B2C_1_signupsignin1).
V aplikaci vyberte webovou aplikaci1.
Jako adresu URL odpovědi vyberte
https://jwt.ms
.Vyberte Spustit tok uživatele.
Dokončete proces přihlašování. Měli byste být přesměrováni na
https://jwt.ms
.Zaznamenejte zakódovanou hodnotu tokenu, která se zobrazí v prohlížeči. Tuto hodnotu tokenu použijete pro autorizační hlavičku v nástroji Postman.
Získání klíče předplatného rozhraní API
Klientská aplikace (v tomto případě Postman), která volá publikované rozhraní API, musí do požadavků HTTP rozhraní API obsahovat platný klíč předplatného služby API Management. Získání klíče předplatného, který se má zahrnout do požadavku HTTP postmanu:
- Na webu Azure Portal přejděte do instance služby Azure API Management.
- Vyberte Předplatná.
- Vyberte tři tečky (...) vedle produktu: Neomezený počet a pak vyberte Zobrazit nebo skrýt klíče.
- Poznamenejte si primární klíč produktu. Tento klíč použijete pro hlavičku
Ocp-Apim-Subscription-Key
v požadavku HTTP v Nástroji Postman.
Testování zabezpečeného volání rozhraní API
Pomocí přístupového tokenu a zaznamenaného klíče předplatného služby Azure API Management teď můžete otestovat, jestli jste správně nakonfigurovali zabezpečený přístup k rozhraní API.
Vytvořte v Nástroji Postman nový
GET
požadavek. Jako adresu URL požadavku zadejte koncový bod seznamu mluvčích rozhraní API, které jste publikovali jako jeden z požadavků. Příklad:https://contosoapim.azure-api.net/conference/speakers
Dále přidejte následující hlavičky:
Key Hodnota Authorization
Zakódovaná hodnota tokenu, kterou jste si poznamenali dříve, má předponu Bearer
(zahrňte mezeru za "bearer")Ocp-Apim-Subscription-Key
Klíč předplatného služby Azure API Management, který jste si poznamenali dříve. Adresa URL požadavku GET a hlavičky by se měly podobat adresám zobrazeným na následujícím obrázku:
V nástroji Postman vyberte tlačítko Odeslat a spusťte požadavek. Pokud jste všechno nakonfigurovali správně, měli byste mít odpověď JSON s kolekcí mluvčích konference (tady je zkrácená):
{ "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" } ] }, [...]
Testování nezabezpečeného volání rozhraní API
Teď, když jste provedli úspěšnou žádost, otestujte případ selhání a ujistěte se, že volání rozhraní API s neplatným tokenem budou odmítnuta podle očekávání. Jedním ze způsobů, jak provést test, je přidat nebo změnit několik znaků v hodnotě tokenu a pak spustit stejný GET
požadavek jako předtím.
Přidejte k hodnotě tokenu několik znaků pro simulaci neplatného tokenu. Například můžete k hodnotě tokenu přidat "INVALID", jak je znázorněno tady:
Výběrem tlačítka Odeslat žádost spusťte. Při neplatném tokenu je
401
očekávaným výsledkem neautorizovaný stavový kód:{ "statusCode": 401, "message": "Unauthorized. Access token is missing or invalid." }
Pokud se zobrazí stavový 401
kód, ověřili jste, že úspěšné požadavky na vaše rozhraní API služby Azure API Management můžou provádět jenom volající s platným přístupovým tokenem vydaným službou Azure AD B2C.
Podpora více aplikací a vystavitelů
Několik aplikací obvykle komunikuje s jedním rozhraním REST API. Pokud chcete, aby vaše rozhraní API přijímalo tokeny určené pro více aplikací, přidejte jejich ID aplikací do <audiences>
elementu v příchozích zásadách služby Azure API Management.
<!-- Accept tokens intended for these recipient applications -->
<audiences>
<audience>44444444-0000-0000-0000-444444444444</audience>
<audience>66666666-0000-0000-0000-666666666666</audience>
</audiences>
Podobně pro podporu více vystavitelů tokenů přidejte jejich identifikátory URI koncového bodu do <issuers>
elementu v příchozích zásadách služby Azure API Management.
<!-- 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>
Migrace na b2clogin.com
Pokud máte rozhraní API služby Azure API ManagementM, které ověřuje tokeny vydané starším login.microsoftonline.com
koncovým bodem, měli byste rozhraní API migrovat a aplikace, které ho volají, aby používaly tokeny vydané b2clogin.com.
Pokud chcete provést fázovanou migraci, můžete postupovat podle tohoto obecného postupu:
- Přidejte podporu v příchozích zásadách služby Azure API Management pro tokeny vydané b2clogin.com i login.microsoftonline.com.
- Aktualizujte aplikace po jednom, abyste získali tokeny z koncového bodu b2clogin.com.
- Jakmile všechny aplikace správně získávají tokeny z b2clogin.com, odeberte z rozhraní API podporu pro tokeny vystavené službou login.microsoftonline.com.
Následující příklad příchozích zásad služby Azure API Management ukazuje, jak přijímat tokeny vydané b2clogin.com i login.microsoftonline.com. Zásady navíc podporují požadavky rozhraní API ze dvou aplikací.
<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>
Další kroky
Další informace o zásadách služby Azure API Management najdete v referenčním indexu zásad služby Azure API Management.
Informace o migraci webových rozhraní API založených na OWIN a jejich aplikacích na b2clogin.com najdete v tématu Migrace webového rozhraní API založeného na OWIN na b2clogin.com.