Sdílet prostřednictvím


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:

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

  1. Přihlaste se k portálu Azure.
  2. 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.
  3. 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.
  4. Vyberte Registrace aplikací a pak vyberte kartu Vlastněné aplikace.
  5. 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.

  1. Na webu Azure Portal přejděte do tenanta Azure AD B2C.

  2. V části Zásady vyberte Toky uživatelů.

  3. Vyberte existující zásadu (například B2C_1_signupsignin1) a pak vyberte Spustit tok uživatele.

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

    Screenshot of the well-known URI hyperlink on the

  5. Výběrem hypertextového odkazu přejděte na stránku OpenID Připojení dobře známé konfigurační stránce.

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

  1. Na webu Azure Portal přejděte do vaší instance služby Azure API Management.

  2. Vyberte Rozhraní API.

  3. Vyberte rozhraní API, které chcete zabezpečit pomocí Azure AD B2C.

  4. Vyberte kartu Návrh.

  5. V části Zpracování příchozích dat vyberte </> a otevřete editor kódu zásad.

  6. 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ů.

  1. Na webu Azure Portal přejděte do tenanta Azure AD B2C.

  2. V části Zásady vyberte Toky uživatelů.

  3. Vyberte stávající tok uživatele pro registraci nebo přihlášení (například B2C_1_signupsignin1).

  4. V aplikaci vyberte webovou aplikaci1.

  5. Jako adresu URL odpovědi vyberte https://jwt.ms.

  6. Vyberte Spustit tok uživatele.

    Screenshot of the

  7. Dokončete proces přihlašování. Měli byste být přesměrováni na https://jwt.ms.

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

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

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:

  1. Na webu Azure Portal přejděte do instance služby Azure API Management.
  2. Vyberte Předplatná.
  3. Vyberte tři tečky (...) vedle produktu: Neomezený počet a pak vyberte Zobrazit nebo skrýt klíče.
  4. 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.

Screenshot of the

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.

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

  2. 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:

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

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

  1. 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:

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

  2. 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:

  1. Přidejte podporu v příchozích zásadách služby Azure API Management pro tokeny vydané b2clogin.com i login.microsoftonline.com.
  2. Aktualizujte aplikace po jednom, abyste získali tokeny z koncového bodu b2clogin.com.
  3. 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.