Udostępnij za pośrednictwem


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

Witamy! Prawdopodobnie nie jest to oczekiwana strona. Chociaż pracujemy nad poprawką, ten link powinien podjąć Cię do odpowiedniego artykułu:

Szybki start: wywoływanie internetowego interfejsu API platformy ASP.NET Core chronionego przez Platforma tożsamości Microsoft

Przepraszamy za niedogodności i doceniamy cierpliwość, podczas gdy pracujemy nad rozwiązaniem tego problemu.

W poniższym przewodniku Szybki start użyto przykładowego kodu internetowego interfejsu API platformy ASP.NET Core, aby zademonstrować sposób ograniczania dostępu zasobów do autoryzowanych kont. Przykład obsługuje autoryzację osobistych kont Microsoft i kont w dowolnej organizacji firmy Microsoft Entra.

Wymagania wstępne

Krok 1. Rejestrowanie aplikacji

Najpierw zarejestruj internetowy interfejs API w dzierżawie firmy Microsoft Entra i dodaj zakres, wykonując następujące kroki:

  1. Zaloguj się do centrum administracyjnego firmy Microsoft Entra co najmniej jako administrator aplikacji.
  2. Przejdź do aplikacji tożsamości>> Rejestracje aplikacji.
  3. Wybierz opcjęNowa rejestracja.
  4. W polu Nazwa wprowadź nazwę aplikacji. Na przykład wprowadź ciąg AspNetCoreWebApi-Quickstart. Użytkownicy aplikacji zobaczą tę nazwę i mogą zostać później zmienieni.
  5. Wybierz pozycję Zarejestruj.
  6. W obszarze Zarządzanie wybierz pozycję Uwidaczniaj interfejs API>Dodaj zakres. W polu Identyfikator URI identyfikatora aplikacji zaakceptuj wartość domyślną, wybierając pozycję Zapisz i kontynuuj, a następnie wprowadź następujące szczegóły:
  • Nazwa zakresu: access_as_user
  • Kto może wyrazić zgodę?: Administratorzy i użytkownicy
  • Nazwa wyświetlana zgody administratora: Access AspNetCoreWebApi-Quickstart
  • Opis zgody administratora: Allows the app to access AspNetCoreWebApi-Quickstart as the signed-in user.
  • Nazwa wyświetlana zgody użytkownika: Access AspNetCoreWebApi-Quickstart
  • Opis zgody użytkownika: Allow the application to access AspNetCoreWebApi-Quickstart on your behalf.
  • Stan: Włączone
  1. Wybierz pozycję Dodaj zakres , aby ukończyć dodawanie zakresu.

Krok 2. Pobieranie projektu ASP.NET Core

Pobierz rozwiązanie ASP.NET Core z usługi GitHub.

Uwaga

Przykładowy kod jest obecnie przeznaczony dla ASP.NET Core 3.1. Przykład można zaktualizować tak, aby korzystał z platformy .NET Core 6.0 i został omówiony w następujących krokach: Zaktualizuj przykładowy kod, aby ASP.NET Core 6.0. Ten przewodnik Szybki start zostanie wycofany w najbliższej przyszłości i zostanie zaktualizowany do korzystania z platformy .NET 6.0.

Krok 3. Konfigurowanie projektu ASP.NET Core

W tym kroku przykładowy kod zostanie skonfigurowany do pracy z rejestracją aplikacji, która została utworzona wcześniej.

  1. Wyodrębnij plik .zip do folderu lokalnego, który znajduje się blisko katalogu głównego dysku, aby uniknąć błędów spowodowanych ograniczeniami długości ścieżki w systemie Windows. Na przykład wyodrębnij do folderu C:\Azure-Samples.

  2. Otwórz rozwiązanie w folderze webapi w edytorze kodu.

  3. W appsettings.json zastąp wartości ClientId, i TenantId.

    "ClientId": "Enter_the_Application_Id_here",
    "TenantId": "Enter_the_Tenant_Info_Here"
    
    • Enter_the_Application_Id_Here to identyfikator aplikacji (klienta) zarejestrowanej aplikacji.
    • Zastąp Enter_the_Tenant_Info_Here element jednym z następujących elementów:
      • Jeśli aplikacja obsługuje tylko konta w tym katalogu organizacyjnym, zastąp tę wartość identyfikatorem katalogu (dzierżawy) lub nazwą dzierżawy (na przykład contoso.onmicrosoft.com). Identyfikator katalogu (dzierżawy) można znaleźć na stronie Przegląd aplikacji.
      • Jeśli aplikacja obsługuje konta w dowolnym katalogu organizacyjnym, zastąp tę wartość wartością organizations.
      • Jeśli aplikacja obsługuje wszystkich użytkowników konta Microsoft, pozostaw tę wartość jako common.

W tym przewodniku Szybki start nie zmieniaj żadnych innych wartości w pliku appsettings.json .

Krok 4. Aktualizowanie przykładowego kodu w celu ASP.NET Core 6.0

Aby zaktualizować ten przykładowy kod do ASP.NET Core 6.0, wykonaj następujące kroki:

  1. Otwórz plik webapi.csproj
  2. Usuń następujący wiersz:
<TargetFramework>netcoreapp3.1</TargetFramework>
  1. Dodaj następujący wiersz w swoim miejscu:
<TargetFramework>netcoreapp6.0</TargetFramework>

Ten krok zapewni, że przykład jest przeznaczony dla platformy .NET Core 6.0.

Krok 5. Uruchamianie przykładu

  1. Otwórz terminal i zmień katalog na folder projektu.

    cd webapi
    
  2. Uruchom następujące polecenie, aby skompilować rozwiązanie:

dotnet run

Jeśli kompilacja zakończyła się pomyślnie, zostaną wyświetlone następujące dane wyjściowe:

Building...
info: Microsoft.Hosting.Lifetime[0]
    Now listening on: https://localhost:{port}
info: Microsoft.Hosting.Lifetime[0]
    Now listening on: http://localhost:{port}
info: Microsoft.Hosting.Lifetime[0]
    Application started. Press Ctrl+C to shut down.
...

Jak działa przykład

Klasa początkowa

Oprogramowanie pośredniczące Microsoft.AspNetCore.Authentication używa klasy wykonywanej Startup podczas uruchamiania procesu hostingu. W jej ConfigureServices metodzie wywoływana AddMicrosoftIdentityWebApi jest metoda rozszerzenia dostarczona przez microsoft.Identity.Web .

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApi(Configuration, "AzureAd");
    }

Metoda AddAuthentication() konfiguruje usługę w celu dodania uwierzytelniania opartego na usłudze JwtBearer.

Wiersz zawierający .AddMicrosoftIdentityWebApi dodaje autoryzację Platforma tożsamości Microsoft do internetowego interfejsu API. Następnie jest skonfigurowany do weryfikowania tokenów dostępu wystawionych przez Platforma tożsamości Microsoft na podstawie informacji w AzureAD sekcji pliku konfiguracji appsettings.json:

klucz appsettings.json opis
ClientId Identyfikator aplikacji (klienta) zarejestrowanej aplikacji.
Instance Punkt końcowy usługi tokenu zabezpieczającego (STS) dla użytkownika do uwierzytelniania. Ta wartość to zazwyczaj https://login.microsoftonline.com/wartość wskazująca chmurę publiczną platformy Azure.
TenantId Nazwa dzierżawy lub identyfikator dzierżawy (identyfikator GUID) lub common logowanie użytkowników przy użyciu kont służbowych lub osobistych Microsoft.

Metoda Configure() zawiera dwie ważne metody app.UseAuthentication() i app.UseAuthorization(), które umożliwiają ich nazwane funkcje:

// The runtime calls this method. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // more code
    app.UseAuthentication();
    app.UseAuthorization();
    // more code
}

Ochrona kontrolera, metody kontrolera lub strony Razor

Metody kontrolera lub kontrolera mogą być chronione za pomocą atrybutu [Authorize] . Ten atrybut ogranicza dostęp do kontrolera lub metod, zezwalając tylko na uwierzytelnionych użytkowników. Jeśli użytkownik nie jest uwierzytelniony, może zostać uruchomiony problem z uwierzytelnianiem, aby uzyskać dostęp do kontrolera.

namespace webapi.Controllers
{
    [Authorize]
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase

Walidacja zakresu w kontrolerze

Kod w interfejsie API sprawdza, czy wymagane zakresy znajdują się w tokenie przy użyciu polecenia HttpContext.VerifyUserHasAnyAcceptedScope> (scopeRequiredByApi);:

namespace webapi.Controllers
{
    [Authorize]
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        // The web API will only accept tokens 1) for users, and 2) having the "access_as_user" scope for this API
        static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi);

            // some code here
        }
    }
}

Pomoc i obsługa techniczna

Jeśli potrzebujesz pomocy, chcesz zgłosić problem lub poznać opcje pomocy technicznej, zobacz Pomoc i obsługa techniczna dla deweloperów.

Następne kroki

Następujące repozytorium GitHub zawiera przykładowe instrukcje kodu internetowego interfejsu API platformy ASP.NET Core i więcej przykładów, które pokazują, jak wykonać następujące czynności:

  • Dodaj uwierzytelnianie do nowego internetowego interfejsu API platformy ASP.NET Core.
  • Wywoływanie internetowego interfejsu API z aplikacji klasycznej.
  • Wywoływanie podrzędnych interfejsów API, takich jak program Microsoft Graph i inne interfejsy API firmy Microsoft.