Szybki start: ochrona internetowego interfejsu API platformy ASP.NET Core przy użyciu Platforma tożsamości Microsoft

W tym przewodniku Szybki start użyto przykładowego kodu internetowego interfejsu API platformy ASP.NET Core, aby pokazać, jak ograniczyć dostęp do zasobów do autoryzowanych kont. W przykładzie użyto ASP.NET Core Identity , która współdziała z biblioteką Microsoft Authentication Library (MSAL) w celu obsługi uwierzytelniania.

Wymagania wstępne

Rejestrowanie aplikacji i identyfikatorów rekordów

Napiwek

Kroki opisane w tym artykule mogą się nieznacznie różnić w zależności od portalu, od którego zaczynasz.

Aby ukończyć rejestrację, podaj nazwę aplikacji i określ obsługiwane typy kont. Po zarejestrowaniu strona Przegląd aplikacji wyświetla identyfikatory wymagane w kodzie źródłowym aplikacji.

  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, w której chcesz zarejestrować aplikację z menu Katalogi i subskrypcje.

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

  4. Wybierz opcjęNowa rejestracja.

  5. Wprowadź nazwę aplikacji, na przykład NewWebAPI1.

  6. W obszarze Obsługiwane typy kont wybierz pozycję Konta tylko w tym katalogu organizacyjnym. Aby uzyskać informacje na temat różnych typów kont, wybierz pozycję Pomóż mi wybrać opcję.

  7. Wybierz pozycję Zarejestruj.

    Zrzut ekranu przedstawiający sposób wprowadzania nazwy i wybierania typu konta.

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

    Zrzut ekranu przedstawiający wartości identyfikatorów na stronie przeglądu.

Uwaga

Obsługiwane typy kont można zmienić, odwołując się do modyfikowania kont obsługiwanych przez aplikację.

Uwidacznianie interfejsu API

Po zarejestrowaniu interfejsu API można skonfigurować jego uprawnienia, definiując zakresy, które interfejs API uwidacznia aplikacjom klienckim. Aplikacje klienckie żądają uprawnień do wykonywania operacji, przekazując token dostępu wraz z żądaniami do chronionego internetowego interfejsu API. Internetowy interfejs API wykonuje żądaną operację tylko wtedy, gdy otrzymany token dostępu zawiera wymagane zakresy.

  1. W obszarze Zarządzanie wybierz pozycję Uwidaczniaj interfejs API > Dodaj zakres. Zaakceptuj proponowany identyfikator URI(api://{clientId}) identyfikatora aplikacji, wybierając pozycję Zapisz i kontynuuj. Jest {clientId} to wartość zarejestrowana na stronie Przegląd . Następnie wprowadź następujące informacje:

    1. W polu Nazwa zakresu wprowadź wartość Forecast.Read.
    2. W przypadku KtoTo może wyrazić zgodę, upewnij się, że wybrano opcję Administracja i użytkowników.
    3. W polu nazwa wyświetlana zgody Administracja wprowadź .Read forecast data
    4. W polu opis Administracja zgody wprowadź .Allows the application to read weather forecast data
    5. W polu Nazwa wyświetlana zgody użytkownika wprowadź .Read forecast data
    6. W polu Opis zgody użytkownika wprowadź wartość Allows the application to read weather forecast data.
    7. Upewnij się, że stan jest ustawiony na Włączone.
  2. Wybierz Dodaj zakres. Jeśli zakres został wprowadzony poprawnie, jest on wyświetlany w okienku Uwidaczniaj interfejs API .

    Zrzut ekranu przedstawiający wartości pól podczas dodawania zakresu do interfejsu API.

Klonowanie lub pobieranie przykładowej aplikacji

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-docs-code-dotnet.git
    
  • Pobierz plik .zip. Wyodrębnij go do ścieżki pliku, w której długość nazwy jest mniejsza niż 260 znaków.

Konfigurowanie przykładowej aplikacji ASP.NET Core

  1. W środowisku IDE otwórz folder projektu ms-identity-docs-code-dotnet/web-api zawierający przykład.

  2. Otwórz appsettings.json plik, który zawiera następujący fragment kodu:

    {
      "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "Enter the tenant ID obtained from the Microsoft Entra admin center",
        "ClientId": "Enter the client ID obtained from the Microsoft Entra admin center",
        "Scopes": "Forecast.Read"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*"
    }
    

    Znajdź następujące elementy key:

    • ClientId — Identyfikator aplikacji, nazywany również klientem. Zastąp value tekst w cudzysłowach identyfikatorem aplikacji (klienta), który został zarejestrowany wcześniej na stronie Przegląd zarejestrowanej aplikacji.
    • TenantId — identyfikator dzierżawy, w której zarejestrowano aplikację. Zastąp value tekst w cudzysłowach wartością identyfikatora katalogu (dzierżawy), która została zarejestrowana wcześniej na stronie Przegląd zarejestrowanej aplikacji.

Uruchamianie przykładowej aplikacji

  1. Uruchom następujące polecenie, aby uruchomić aplikację:

    dotnet run
    
  2. Zostanie wyświetlone dane wyjściowe podobne do następującego przykładu:

    ...
    info: Microsoft.Hosting.Lifetime[14]
          Now listening on: https://localhost:{port}
    ...
    

    Zarejestruj numer portu w adresie https://localhost:{port} URL.

  3. Aby sprawdzić, czy punkt końcowy jest chroniony, użyj następującego polecenia cURL w powłoce Bash, aby wysłać nieuwierzytelnione żądanie HTTP GET w powłoce Bash:

    curl -X GET https://localhost:5001/weatherforecast -ki
    

    Oczekiwana odpowiedź to 401 Brak autoryzacji z danymi wyjściowymi podobnymi do następujących:

    user@host:~$ curl -X GET https://localhost:5001/weatherforecast -ki
    HTTP/2 401
    date: Fri, 23 Sep 2023 23:34:24 GMT
    server: Kestrel
    www-authenticate: Bearer
    content-length: 0