Wywoływanie interfejsu API w przykładowej aplikacji demona Node.js

W tym przewodniku użyto przykładowej aplikacji demona Node.js, aby pokazać, jak aplikacja demona uzyskuje token do wywoływania internetowego interfejsu API. Firma Microsoft Entra chroni internetowy interfejs API.

Aplikacja demona uzyskuje token w imieniu siebie (nie w imieniu użytkownika). Użytkownicy nie mogą wchodzić w interakcje z aplikacją demona, ponieważ wymaga własnej tożsamości. Ten typ aplikacji żąda tokenu dostępu przy użyciu tożsamości aplikacji i przedstawienia identyfikatora aplikacji, poświadczeń (hasła lub certyfikatu) oraz identyfikatora URI aplikacji do identyfikatora zewnętrznego.

Aplikacja demona używa standardowego przyznawania poświadczeń klienta OAuth 2.0. Aby uprościć proces uzyskiwania tokenu, przykład używany w tym artykule używa biblioteki Microsoft Authentication Library for Node (MSAL Node).

Wymagania wstępne

Rejestrowanie aplikacji demona i internetowego interfejsu API

W tym kroku utworzysz demona i rejestrację aplikacji internetowego interfejsu API, a następnie określisz zakresy internetowego interfejsu API.

Rejestrowanie aplikacji internetowego interfejsu API

  1. Zaloguj się do centrum administracyjnego firmy Microsoft Entra co najmniej jako deweloper aplikacji.

  2. Jeśli masz dostęp do wielu dzierżaw, użyj ikonyUstawienia w górnym menu, aby przełączyć się do dzierżawy zewnętrznej z menu Katalogi i subskrypcje.

  3. Przejdź do aplikacji tożsamości>> Rejestracje aplikacji.

  4. Wybierz pozycję + Nowa rejestracja.

  5. Na wyświetlonej stronie Rejestrowanie aplikacji wprowadź informacje o rejestracji aplikacji:

    1. W sekcji Nazwa wprowadź zrozumiałą nazwę aplikacji, która będzie wyświetlana użytkownikom aplikacji, na przykład ciam-ToDoList-api.

    2. W obszarze Obsługiwane typy kont wybierz pozycję Konta tylko w tym katalogu organizacyjnym.

  6. Wybierz pozycję Zarejestruj, aby utworzyć aplikację.

  7. Po zakończeniu rejestracji zostanie wyświetlone okienko Przegląd aplikacji. Zapisz identyfikator katalogu (dzierżawy) i identyfikator aplikacji (klienta) do użycia w kodzie źródłowym aplikacji.

Konfigurowanie ról aplikacji

Interfejs API musi opublikować co najmniej jedną rolę aplikacji dla aplikacji, nazywanych również uprawnieniem aplikacji, aby aplikacje klienckie uzyskały token dostępu jako siebie. Uprawnienia aplikacji to typ uprawnień, które interfejsy API powinny publikować, gdy chcą umożliwić aplikacjom klienckim pomyślne uwierzytelnienie się jako siebie i nie trzeba logować użytkowników. Aby opublikować uprawnienie aplikacji, wykonaj następujące kroki:

  1. Na stronie Rejestracje aplikacji wybierz utworzoną aplikację (np. ciam-ToDoList-api), aby otworzyć stronę Przegląd.

  2. W obszarze Zarządzanie wybierz pozycję Role aplikacji.

  3. Wybierz pozycję Utwórz rolę aplikacji, a następnie wprowadź następujące wartości, a następnie wybierz pozycję Zastosuj , aby zapisać zmiany:

    Właściwości Wartość
    Display name ToDoList.Read.All
    Dozwolone typy składowych Aplikacje
    Wartość ToDoList.Read.All
    opis Zezwalaj aplikacji na odczytywanie listy zadań do wykonania każdego użytkownika przy użyciu listy "TodoListApi"
  4. Ponownie wybierz pozycję Utwórz rolę aplikacji, a następnie wprowadź następujące wartości dla drugiej roli aplikacji, a następnie wybierz pozycję Zastosuj , aby zapisać zmiany:

    Właściwości Wartość
    Display name ToDoList.ReadWrite.All
    Dozwolone typy składowych Aplikacje
    Wartość ToDoList.ReadWrite.All
    opis Zezwalaj aplikacji na odczytywanie i zapisywanie listy zadań do wykonania każdego użytkownika przy użyciu listy "ToDoListApi"

Konfigurowanie opcjonalnych oświadczeń

Tokeny zwracane przez tożsamość firmy Microsoft są mniejsze, aby zapewnić optymalną wydajność przez klientów, którzy ich żądają. W związku z tym kilka oświadczeń nie jest już obecnych w tokenie domyślnie i musi zostać poproszonych o podanie w szczególności dla poszczególnych aplikacji. W przypadku tej aplikacji dołączasz opcjonalne oświadczenie idtyp , aby ułatwić interfejsowi API sieci Web określenie, czy token jest tokenem aplikacji, czy tokenem aplikacji i tokenu użytkownika. Mimo że można użyć kombinacji oświadczeń scp i ról w tym samym celu, użycie oświadczenia idtyp jest najprostszym sposobem, aby poinformować token aplikacji i token użytkownika od siebie. Na przykład wartość tego oświadczenia to aplikacja , gdy token jest tokenem tylko dla aplikacji.

Aby skonfigurować opcjonalne oświadczenie idtypu , wykonaj następujące czynności:

  1. Na stronie Rejestracje aplikacji, dla której chcesz skonfigurować opcjonalne oświadczenie, takie jak ciam-client-app, aby otworzyć stronę Przegląd.

  2. W obszarze Zarządzanie wybierz pozycję Konfiguracja tokenu.

  3. Wybierz Dodaj opcjonalne roszczenie.

  4. W obszarze Typ tokenu wybierz pozycję Dostęp.

  5. Wybierz opcjonalny identyfikator oświadczenia.

  6. Wybierz pozycję Dodaj , aby zapisać zmiany.

Rejestrowanie aplikacji demona

Aby umożliwić aplikacji logowanie użytkowników w usłudze Microsoft Entra, Tożsamość zewnętrzna Microsoft Entra należy pamiętać o tworzonej aplikacji. Rejestracja aplikacji ustanawia relację zaufania między aplikacją a firmą Microsoft Entra. Podczas rejestrowania aplikacji identyfikator zewnętrzny generuje unikatowy identyfikator znany jako identyfikator aplikacji (klienta) — wartość używana do identyfikowania aplikacji podczas tworzenia żądań uwierzytelniania.

W poniższych krokach pokazano, jak zarejestrować aplikację w centrum administracyjnym firmy Microsoft Entra:

  1. Zaloguj się do centrum administracyjnego firmy Microsoft Entra co najmniej jako deweloper aplikacji.

  2. Jeśli masz dostęp do wielu dzierżaw, użyj ikonyUstawienia w górnym menu, aby przełączyć się do dzierżawy zewnętrznej z menu Katalogi i subskrypcje.

  3. Przejdź do aplikacji tożsamości>> Rejestracje aplikacji.

  4. Wybierz pozycję + Nowa rejestracja.

  5. Na wyświetlonej stronie Rejestrowanie aplikacji ;

    1. Wprowadź zrozumiałą nazwę aplikacji wyświetlaną użytkownikom aplikacji, na przykład ciam-client-app.
    2. W obszarze Obsługiwane typy kont wybierz pozycję Konta tylko w tym katalogu organizacyjnym.
  6. Wybierz pozycję Zarejestruj.

  7. Po pomyślnej rejestracji zostanie wyświetlone okienko Przegląd aplikacji. Zarejestruj identyfikator aplikacji (klienta), który ma być używany w kodzie źródłowym aplikacji.

Tworzenie wpisu tajnego klienta

Utwórz klucz tajny klienta dla zarejestrowanej aplikacji. Aplikacja używa wpisu tajnego klienta, aby udowodnić swoją tożsamość, gdy żąda tokenów.

  1. Na stronie Rejestracje aplikacji wybierz utworzoną aplikację (np. ciam-client-app), aby otworzyć stronę Przegląd.
  2. W obszarze Zarządzanie wybierz pozycję Certyfikaty i wpisy tajne.
  3. Wybierz Nowy klucz tajny klienta.
  4. W polu Opis wprowadź opis wpisu tajnego klienta (na przykład wpis tajny klienta aplikacji ciam).
  5. W obszarze Wygasa wybierz czas trwania, dla którego wpis tajny jest prawidłowy (zgodnie z regułami zabezpieczeń organizacji), a następnie wybierz pozycję Dodaj.
  6. Zarejestruj wartość wpisu tajnego. Użyjesz tej wartości do konfiguracji w późniejszym kroku. Wartość wpisu tajnego nie zostanie ponownie wyświetlona i nie będzie pobierana w żaden sposób po przejściu z obszaru Certyfikaty i wpisy tajne. Upewnij się, że został on zarejestrowany.

Udzielanie uprawnień interfejsu API do aplikacji demona

  1. Na stronie Rejestracje aplikacji wybierz utworzoną aplikację, na przykład ciam-client-app.

  2. W obszarze Zarządzanie wybierz pozycję Uprawnienia interfejsu API.

  3. W obszarze Skonfigurowane uprawnienia wybierz pozycję Dodaj uprawnienie.

  4. Wybierz kartę Interfejsy API używane przez moją organizację.

  5. Na liście interfejsów API wybierz interfejs API, taki jak ciam-ToDoList-api.

  6. Wybierz opcję Uprawnienia aplikacji. Wybieramy tę opcję, gdy aplikacja loguje się jako sama, a nie użytkownicy.

  7. Z listy uprawnień wybierz pozycję TodoList.Read.All, ToDoList.ReadWrite.All (w razie potrzeby użyj pola wyszukiwania).

  8. Wybierz przycisk Dodaj uprawnienia.

  9. W tym momencie przypisano uprawnienia poprawnie. Jednak ponieważ aplikacja demona nie zezwala użytkownikom na interakcję z nią, sami użytkownicy nie mogą wyrazić zgody na te uprawnienia. Aby rozwiązać ten problem, administrator musi wyrazić zgodę na te uprawnienia w imieniu wszystkich użytkowników w dzierżawie:

    1. Wybierz pozycję Udziel zgody administratora dla <swojej nazwy> dzierżawy, a następnie wybierz pozycję Tak.
    2. Wybierz pozycję Odśwież, a następnie sprawdź, czy w obszarze Stan dla obu uprawnień jest wyświetlana wartość Przyznane dla <nazwy> dzierżawy.

Klonowanie lub pobieranie przykładowej aplikacji demona i internetowego interfejsu API

Aby uzyskać przykładową aplikację, możesz ją sklonować z usługi GitHub lub pobrać jako plik .zip.

  • Aby sklonować przykład, otwórz wiersz polecenia i przejdź do miejsca, w którym chcesz utworzyć projekt, a następnie wprowadź następujące polecenie:

    git clone https://github.com/Azure-Samples/ms-identity-ciam-javascript-tutorial.git
    
  • Pobierz plik .zip. Wyodrębnij go do ścieżki pliku, w której długość nazwy jest mniejsza niż 260 znaków.

Instalowanie zależności projektu

  1. Otwórz okno konsoli i przejdź do katalogu zawierającego przykładową aplikację Node.js:

    cd 2-Authorization\3-call-api-node-daemon\App
    
  2. Uruchom następujące polecenia, aby zainstalować zależności aplikacji:

    npm install && npm update
    

Konfigurowanie przykładowej aplikacji demona i interfejsu API

Aby użyć rejestracji aplikacji w przykładzie aplikacji internetowej klienta:

  1. W edytorze kodu otwórz App\authConfig.js plik.

  2. Znajdź symbol zastępczy:

    • Enter_the_Application_Id_Here zastąp ją identyfikatorem aplikacji (klienta) zarejestrowanej wcześniej aplikacji demona.

    • Enter_the_Tenant_Subdomain_Here i zastąp ją poddomeną Katalog (dzierżawa). Jeśli na przykład domena podstawowa dzierżawy to contoso.onmicrosoft.com, użyj polecenia contoso. Jeśli nie masz swojej nazwy dzierżawy, dowiedz się, jak odczytywać szczegóły dzierżawy.

    • Enter_the_Client_Secret_Here i zastąp ją skopiowaną wcześniej wartością wpisu tajnego aplikacji demona.

    • Enter_the_Web_Api_Application_Id_Here zastąp go identyfikatorem aplikacji (klienta) skopiowanego wcześniej internetowego interfejsu API.

Aby użyć rejestracji aplikacji w przykładowym internetowym interfejsie API:

  1. W edytorze kodu otwórz API\ToDoListAPI\appsettings.json plik.

  2. Znajdź symbol zastępczy:

    • Enter_the_Application_Id_Here i zastąp go identyfikatorem aplikacji (klienta) skopiowanego internetowego interfejsu API.

    • Enter_the_Tenant_Id_Here i zastąp go skopiowanymi wcześniej identyfikatorami katalogu (dzierżawy).

    • Enter_the_Tenant_Subdomain_Here i zastąp ją poddomeną Katalog (dzierżawa). Jeśli na przykład domena podstawowa dzierżawy to contoso.onmicrosoft.com, użyj polecenia contoso. Jeśli nie masz swojej nazwy dzierżawy, dowiedz się, jak odczytywać szczegóły dzierżawy.

Uruchamianie i testowanie przykładowej aplikacji demona i interfejsu API

  1. Otwórz okno konsoli, a następnie uruchom internetowy interfejs API przy użyciu następujących poleceń:

    cd 2-Authorization\3-call-api-node-daemon\API\ToDoListAPI
    dotnet run
    
  2. Uruchom klienta aplikacji internetowej przy użyciu następujących poleceń:

    2-Authorization\3-call-api-node-daemon\App
    node . --op getToDos
    
  • Jeśli aplikacja demona i internetowy interfejs API zostały pomyślnie uruchomione, w oknie konsoli powinien zostać wyświetlony kod podobny do poniższej tablicy JSON.

    {
        "id": 1,
        "owner": "3e8....-db63-43a2-a767-5d7db...",
        "description": "Pick up grocery"
    },
    {
        "id": 2,
        "owner": "c3cc....-c4ec-4531-a197-cb919ed.....",
        "description": "Finish invoice report"
    },
    {
        "id": 3,
        "owner": "a35e....-3b8a-4632-8c4f-ffb840d.....",
        "description": "Water plants"
    }
    

Jak to działa

Aplikacja Node.js używa poświadczeń klienta OAuth 2.0, aby uzyskać token dostępu dla siebie, a nie dla użytkownika. Token dostępu, którego żąda aplikacja, zawiera uprawnienia reprezentowane jako role. Przepływ poświadczeń klienta używa tego zestawu uprawnień zamiast zakresów użytkownika dla tokenów aplikacji. Te uprawnienia aplikacji zostały ujawnione wcześniej w internetowym interfejsie API, a następnie przyznano je aplikacji demona.

Po stronie interfejsu API internetowy interfejs API musi sprawdzić, czy token dostępu ma wymagane uprawnienia (uprawnienia aplikacji). Internetowy interfejs API nie może zaakceptować tokenu dostępu, który nie ma wymaganych uprawnień.

Dostęp do danych

Punkt końcowy internetowego interfejsu API powinien być przygotowany do akceptowania wywołań zarówno od użytkowników, jak i aplikacji. W związku z tym powinna ona mieć sposób na odpowiednie reagowanie na każde żądanie. Na przykład wywołanie od użytkownika za pośrednictwem delegowanych uprawnień/zakresów odbiera listę danych użytkownika do wykonania. Z drugiej strony wywołanie z aplikacji za pośrednictwem uprawnień/ról aplikacji może odbierać całą listę zadań do wykonania. Jednak w tym artykule wykonujemy tylko wywołanie aplikacji, więc nie musieliśmy konfigurować delegowanych uprawnień/zakresów.