Zabezpieczanie interfejsu API usługi Azure API Management za pomocą usługi Azure AD B2C

Dowiedz się, jak ograniczyć dostęp do interfejsu API usługi Azure API Management do klientów uwierzytelnionych w usłudze Azure Active Directory B2C (Azure AD B2C). Postępuj zgodnie z instrukcjami w tym artykule, aby utworzyć i przetestować zasady ruchu przychodzącego w usłudze Azure API Management, które ograniczają dostęp tylko do tych żądań, które zawierają prawidłowy token dostępu wystawiony przez usługę Azure AD B2C.

Wymagania wstępne

Przed rozpoczęciem upewnij się, że masz następujące zasoby:

Uzyskiwanie identyfikatora aplikacji usługi Azure AD B2C

W przypadku zabezpieczania interfejsu API w usłudze Azure API Management za pomocą usługi Azure AD B2C potrzebne są kilka wartości dla zasad ruchu przychodzącego tworzonych w usłudze Azure API Management. Najpierw zapisz identyfikator aplikacji utworzonej wcześniej w dzierżawie usługi Azure AD B2C. Jeśli używasz utworzonej aplikacji w celu spełnienia wymagań wstępnych, użyj identyfikatora aplikacji dla aplikacji webapp1.

Aby zarejestrować aplikację w dzierżawie usługi Azure AD B2C, możesz użyć naszego nowego, ujednoliconego środowiska Rejestracje aplikacji lub starszego środowiska aplikacji. Dowiedz się więcej o nowym środowisku rejestracji.

  1. Zaloguj się w witrynie Azure Portal.
  2. Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się do dzierżawy usługi Azure AD B2C z menu Katalogi i subskrypcje.
  3. W okienku po lewej stronie wybierz pozycję Azure AD B2C. Alternatywnie możesz wybrać pozycję Wszystkie usługi , a następnie wyszukać i wybrać usługę Azure AD B2C.
  4. Wybierz Rejestracje aplikacji, a następnie wybierz kartę Aplikacje należące do.
  5. Zapisz wartość w kolumnie Identyfikator aplikacji (klienta) dla aplikacji webapp1 lub dla innej utworzonej wcześniej aplikacji.

Uzyskiwanie punktu końcowego wystawcy tokenu

Następnie uzyskaj dobrze znany adres URL konfiguracji dla jednego z przepływów użytkownika usługi Azure AD B2C. Potrzebny jest również identyfikator URI punktu końcowego wystawcy tokenu, który chcesz obsługiwać w usłudze Azure API Management.

  1. W witrynie Azure Portal przejdź do dzierżawy usługi Azure AD B2C.

  2. W obszarze Zasady wybierz pozycję Przepływy użytkownika.

  3. Wybierz istniejące zasady (na przykład B2C_1_signupsignin1), a następnie wybierz pozycję Uruchom przepływ użytkownika.

  4. Zarejestruj adres URL w hiperlinku wyświetlanym w nagłówku Uruchom przepływ użytkownika w górnej części strony. Ten adres URL to Połączenie dobrze znany punkt końcowy odnajdywania dla przepływu użytkownika i zostanie użyty w następnej sekcji podczas konfigurowania zasad ruchu przychodzącego w usłudze Azure API Management.

    Screenshot of the well-known URI hyperlink on the

  5. Wybierz hiperlink, aby przejść do strony OpenID Połączenie dobrze znanej konfiguracji.

  6. Na stronie, która zostanie otwarta w przeglądarce, zarejestruj issuer wartość. Przykład:

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

    Ta wartość zostanie użyta w następnej sekcji podczas konfigurowania interfejsu API w usłudze Azure API Management.

W następnej sekcji powinny być zarejestrowane dwa adresy URL: identyfikator OpenID Połączenie dobrze znany adres URL punktu końcowego konfiguracji i identyfikator URI wystawcy. Przykład:

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/

Konfigurowanie zasad ruchu przychodzącego w usłudze Azure API Management

Teraz możesz dodać zasady ruchu przychodzącego w usłudze Azure API Management, które weryfikują wywołania interfejsu API. Dodając zasady weryfikacji tokenu internetowego JSON (JWT), które weryfikują odbiorców i wystawcę w tokenie dostępu, można upewnić się, że akceptowane są tylko wywołania interfejsu API z prawidłowym tokenem.

  1. W witrynie Azure Portal przejdź do wystąpienia usługi Azure API Management.

  2. Wybierz pozycję Interfejsy API.

  3. Wybierz interfejs API, który chcesz zabezpieczyć za pomocą usługi Azure AD B2C.

  4. Wybierz kartę Projekt.

  5. W obszarze Przetwarzanie przychodzące wybierz /<>, aby otworzyć edytor kodu zasad.

  6. Umieść następujący <validate-jwt> tag wewnątrz <inbound> zasad, a następnie wykonaj następujące czynności:

    a. url Zaktualizuj wartość w elemecie <openid-config> za pomocą dobrze znanego adresu URL konfiguracji zasad.
    b. <audience> Zaktualizuj element przy użyciu identyfikatora aplikacji utworzonej wcześniej w dzierżawie usługi B2C (na przykład webapp1).
    c. Zaktualizuj element przy <issuer> użyciu zarejestrowanego wcześniej punktu końcowego wystawcy tokenu.

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

Weryfikowanie bezpiecznego dostępu do interfejsu API

Aby upewnić się, że tylko uwierzytelnione osoby wywołujące mogą uzyskiwać dostęp do interfejsu API, możesz zweryfikować konfigurację usługi Azure API Management, wywołując interfejs API za pomocą narzędzia Postman.

Aby wywołać interfejs API, potrzebujesz zarówno tokenu dostępu wystawionego przez usługę Azure AD B2C, jak i klucz subskrypcji usługi Azure API Management.

Pobranie tokenu dostępu

Najpierw potrzebny jest token wystawiony przez usługę Azure AD B2C do użycia w nagłówku w narzędziu Authorization Postman. Możesz ją uzyskać, korzystając z funkcji Uruchom teraz przepływu użytkownika rejestracji/logowania utworzonego jako jedno z wymagań wstępnych.

  1. W witrynie Azure Portal przejdź do dzierżawy usługi Azure AD B2C.

  2. W obszarze Zasady wybierz pozycję Przepływy użytkownika.

  3. Wybierz istniejący przepływ użytkownika rejestracji/logowania (na przykład B2C_1_signupsignin1).

  4. W obszarze Aplikacja wybierz pozycję webapp1.

  5. W polu Adres URL odpowiedzi wybierz pozycję https://jwt.ms.

  6. Wybierz Uruchom przepływ użytkownika.

    Screenshot of the

  7. Zakończ proces logowania. Powinno nastąpić przekierowanie do https://jwt.ms.

  8. Zarejestruj zakodowaną wartość tokenu wyświetlaną w przeglądarce. Ta wartość tokenu jest używana dla nagłówka autoryzacji w narzędziu Postman.

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

Pobieranie klucza subskrypcji interfejsu API

Aplikacja kliencka (w tym przypadku Postman), która wywołuje opublikowany interfejs API, musi zawierać prawidłowy klucz subskrypcji usługi API Management w żądaniach HTTP do interfejsu API. Aby uzyskać klucz subskrypcji do uwzględnienia w żądaniu HTTP postman:

  1. W witrynie Azure Portal przejdź do wystąpienia usługi Azure API Management.
  2. Wybierz pozycję Subskrypcje.
  3. Wybierz wielokropek (...) obok pozycji Produkt: nieograniczony, a następnie wybierz pozycję Pokaż/ukryj klucze.
  4. Zarejestruj klucz podstawowy produktu. Ten klucz jest używany dla nagłówka w żądaniu HTTP w narzędziu Ocp-Apim-Subscription-Key Postman.

Screenshot of the

Testowanie bezpiecznego wywołania interfejsu API

Po zarejestrowaniu tokenu dostępu i klucza subskrypcji usługi Azure API Management możesz teraz sprawdzić, czy prawidłowo skonfigurowano bezpieczny dostęp do interfejsu API.

  1. Utwórz nowe GET żądanie w narzędziu Postman. W przypadku adresu URL żądania określ punkt końcowy listy prelegentów interfejsu API opublikowanego jako jeden z wymagań wstępnych. Przykład:

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

  2. Następnie dodaj następujące nagłówki:

    Klucz Wartość
    Authorization Zakodowana wartość tokenu zarejestrowana wcześniej, poprzedzona prefiksem (uwzględnij spację po elempcie Bearer "Bearer")
    Ocp-Apim-Subscription-Key Zarejestrowany wcześniej klucz subskrypcji usługi Azure API Management.

    Adres URL żądania GET i nagłówki powinny wyglądać podobnie do tych pokazanych na poniższej ilustracji:

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

  3. W narzędziu Postman wybierz przycisk Wyślij , aby wykonać żądanie. Jeśli wszystko zostało poprawnie skonfigurowane, należy otrzymać odpowiedź JSON z kolekcją prelegentów konferencji (pokazanych tutaj, obcięte):

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

Testowanie niezabezpieczonego wywołania interfejsu API

Po pomyślnym żądaniu przetestuj przypadek niepowodzenia, aby upewnić się, że wywołania interfejsu API z nieprawidłowym tokenem są odrzucane zgodnie z oczekiwaniami. Jednym ze sposobów wykonania testu jest dodanie lub zmiana kilku znaków w wartości tokenu, a następnie uruchomienie tego samego GET żądania co poprzednio.

  1. Dodaj kilka znaków do wartości tokenu, aby zasymulować nieprawidłowy token. Możesz na przykład dodać wartość "INVALID" do wartości tokenu, jak pokazano poniżej:

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

  2. Wybierz przycisk Wyślij, aby wykonać żądanie. W przypadku nieprawidłowego tokenu oczekiwany wynik jest 401 nieautoryzowanym kodem stanu:

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

Jeśli widzisz 401 kod stanu, zweryfikowano, że tylko osoby wywołujące z prawidłowym tokenem dostępu wystawionym przez usługę Azure AD B2C mogą wysyłać pomyślne żądania do interfejsu API usługi Azure API Management.

Obsługa wielu aplikacji i wystawców

Kilka aplikacji zwykle współdziała z jednym interfejsem API REST. Aby umożliwić interfejsowi API akceptowanie tokenów przeznaczonych dla wielu aplikacji, dodaj ich identyfikatory aplikacji do <audiences> elementu w zasadach ruchu przychodzącego usługi 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>

Podobnie, aby obsługiwać wielu wystawców tokenów, dodaj swoje identyfikatory URI punktu końcowego <issuers> do elementu w zasadach ruchu przychodzącego usługi 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>

Migrowanie do b2clogin.com

Jeśli masz interfejs API usługi Azure API ManagementM, który weryfikuje tokeny wystawione przez starszy login.microsoftonline.com punkt końcowy, należy przeprowadzić migrację interfejsu API i aplikacji wywołujących go do używania tokenów wystawionych przez b2clogin.com.

Możesz wykonać ten ogólny proces, aby przeprowadzić migrację etapową:

  1. Dodaj obsługę w zasadach ruchu przychodzącego usługi Azure API Management dla tokenów wystawionych przez b2clogin.com i login.microsoftonline.com.
  2. Zaktualizuj aplikacje pojedynczo, aby uzyskać tokeny z punktu końcowego b2clogin.com.
  3. Po prawidłowym uzyskaniu tokenów z b2clogin.com wszystkich aplikacji usuń obsługę tokenów login.microsoftonline.com wystawionych z interfejsu API.

W poniższym przykładzie zasady ruchu przychodzącego usługi Azure API Management ilustrują sposób akceptowania tokenów wystawionych zarówno przez b2clogin.com, jak i login.microsoftonline.com. Ponadto zasady obsługują żądania interfejsu API z dwóch aplikacji.

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

Następne kroki

Aby uzyskać dodatkowe informacje na temat zasad usługi Azure API Management, zobacz indeks referencyjny zasad usługi Azure API Management.

Aby uzyskać informacje na temat migrowania internetowych interfejsów API opartych na protokole OWIN i ich aplikacji do b2clogin.com, zobacz Migrowanie internetowego interfejsu API opartego na protokole OWIN do b2clogin.com.