Udostępnij za pośrednictwem


Włączanie uwierzytelniania w swoim własnym API sieciowym przy użyciu usługi Azure AD B2C

Ważne

Od 1 maja 2025 r. usługa Azure AD B2C nie będzie już dostępna do zakupu dla nowych klientów. Dowiedz się więcej w naszych często zadawanych pytaniach.

Aby autoryzować dostęp do interfejsu API, możesz obsługiwać tylko żądania zawierające prawidłowy token dostępu, który wydaje Azure Active Directory B2C (Azure AD B2C). W tym artykule pokazano, jak włączyć autoryzację usługi Azure AD B2C do internetowego interfejsu API. Po wykonaniu kroków opisanych w tym artykule tylko użytkownicy, którzy uzyskują prawidłowy token dostępu, będą autoryzowani do wywoływania punktów końcowych internetowego interfejsu API.

Wymagania wstępne

Przed rozpoczęciem przeczytaj jeden z następujących artykułów, w którym omówiono sposób konfigurowania uwierzytelniania dla aplikacji wywołujących internetowe interfejsy API. Następnie wykonaj kroki opisane w tym artykule, aby zastąpić przykładowy internetowy interfejs API własnym internetowym interfejsem API.

Przegląd

Uwierzytelnianie oparte na tokenach gwarantuje, że żądania do internetowego interfejsu API zawierają prawidłowy token dostępu.

Aplikacja wykonuje następujące czynności:

  1. Uwierzytelnia użytkowników za pomocą usługi Azure AD B2C.

  2. Uzyskuje token dostępu z wymaganymi uprawnieniami (zakresami) dla punktu końcowego w web API.

  3. Przekazuje token dostępu jako token typu bearer w nagłówku autoryzacji żądania HTTP przy użyciu następującego formatu:

    Authorization: Bearer <access token>
    

Internetowy interfejs API wykonuje następujące kroki:

  1. Odczytuje token dostępu z nagłówka autoryzacyjnego w żądaniu HTTP.

  2. Weryfikuje token.

  3. Weryfikuje uprawnienia (zakresy) w tokenie.

  4. Odczytuje oświadczenia zakodowane w tokenie (opcjonalnie).

  5. Odpowiada na żądanie HTTP.

Omówienie rejestracji aplikacji

Aby umożliwić aplikacji logowanie się za pomocą usługi Azure AD B2C i wywoływanie internetowego interfejsu API, musisz zarejestrować dwie aplikacje w katalogu usługi Azure AD B2C.

  • Rejestracja aplikacji internetowej, mobilnej lub SPA umożliwia aplikacji logowanie się za pomocą usługi Azure AD B2C. Proces rejestracji aplikacji generuje identyfikator aplikacji, znany również jako identyfikator klienta, który jednoznacznie identyfikuje aplikację (na przykład identyfikator aplikacji: 1).

  • Rejestracja interfejsu internetowego API umożliwia twojej aplikacji wywoływanie chronionego interfejsu API. Rejestracja uwidacznia uprawnienia internetowego interfejsu API (zakresy). Proces rejestracji aplikacji generuje identyfikator aplikacji, który jednoznacznie identyfikuje internetowy interfejs API (na przykład identyfikator aplikacji: 2). Przyznaj aplikacji (identyfikator aplikacji: 1) uprawnienia do zakresów internetowego interfejsu API (identyfikator aplikacji: 2).

Rejestracje aplikacji i architektura aplikacji zostały opisane na poniższym diagramie:

Diagram rejestracji aplikacji i architektury aplikacji dla aplikacji z internetowym interfejsem API.

Przygotowywanie środowiska projektowego

W następnych sekcjach utworzysz nowy projekt internetowego interfejsu API. Wybierz język programowania, ASP.NET Core lub Node.js. Upewnij się, że masz komputer z uruchomionym jednym z następujących programów:

Krok 1. Tworzenie chronionego internetowego interfejsu API

Utwórz nowy projekt internetowego interfejsu API. Najpierw wybierz język programowania, którego chcesz użyć, ASP.NET Core lub Node.js.

Użyj polecenia dotnet new. Polecenie dotnet new tworzy nowy folder o nazwie TodoList z elementami zawartości projektu internetowego interfejsu API. Otwórz katalog, a następnie otwórz program Visual Studio Code.

dotnet new webapi -o TodoList
cd TodoList
code . 

Po wyświetleniu monitu o dodanie wymaganych zasobów do projektu wybierz pozycję Tak.

Krok 2. Instalowanie zależności

Dodaj bibliotekę uwierzytelniania do projektu API sieciowego. Biblioteka uwierzytelniania analizuje nagłówek uwierzytelniania HTTP, weryfikuje token i wyodrębnia oświadczenia. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją biblioteki.

Aby dodać bibliotekę uwierzytelniania, zainstaluj pakiet, uruchamiając następujące polecenie:

dotnet add package Microsoft.Identity.Web

Krok 3. Inicjowanie biblioteki uwierzytelniania

Dodaj niezbędny kod, aby zainicjować bibliotekę uwierzytelniania.

Otwórz Startup.cs , a następnie na początku klasy dodaj następujące using deklaracje:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;

ConfigureServices(IServiceCollection services) Znajdź funkcję. Następnie przed wierszem services.AddControllers(); kodu dodaj następujący fragment kodu:

public void ConfigureServices(IServiceCollection services)
{
    // Adds Microsoft Identity platform (Azure AD B2C) support to protect this Api
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddMicrosoftIdentityWebApi(options =>
    {
        Configuration.Bind("AzureAdB2C", options);

        options.TokenValidationParameters.NameClaimType = "name";
    },
    options => { Configuration.Bind("AzureAdB2C", options); });
    // End of the Microsoft Identity platform block    

    services.AddControllers();
}

Configure Znajdź funkcję. Następnie bezpośrednio po app.UseRouting(); wierszu kodu dodaj następujący fragment kodu:

app.UseAuthentication();

Po zmianie kod powinien wyglądać podobnie do następującego fragmentu kodu:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();

    app.UseRouting();
    
    // Add the following line 
    app.UseAuthentication();
    // End of the block you add
    
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Krok 4. Dodawanie punktów końcowych

Dodaj dwa punkty końcowe do webowego interfejsu API.

  • Anonimowy /public punkt końcowy. Ten punkt końcowy zwraca bieżącą datę i godzinę. Służy do debugowania internetowego interfejsu API za pomocą wywołań anonimowych.
  • Chroniony /hello punkt końcowy. Ten endpoint zwraca wartość name żądania w tokenie dostępu.

Aby dodać anonimowy punkt końcowy:

W folderze /Controllers dodaj plik PublicController.cs , a następnie dodaj go do następującego fragmentu kodu:

using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace TodoList.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class PublicController : ControllerBase
    {
        private readonly ILogger<PublicController> _logger;

        public PublicController(ILogger<PublicController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public ActionResult Get()
        {
            return Ok( new {date = DateTime.UtcNow.ToString()});
        }
    }
}

Aby dodać chroniony punkt końcowy:

W folderze /Controllers dodaj plik HelloController.cs , a następnie dodaj go do następującego kodu:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Identity.Web.Resource;

namespace TodoList.Controllers
{
    [Authorize]
    [RequiredScope("tasks.read")]
    [ApiController]
    [Route("[controller]")]
    public class HelloController : ControllerBase
    {

        private readonly ILogger<HelloController> _logger;
        private readonly IHttpContextAccessor _contextAccessor;

        public HelloController(ILogger<HelloController> logger, IHttpContextAccessor contextAccessor)
        {
            _logger = logger;
            _contextAccessor = contextAccessor;
        }

        [HttpGet]
        public ActionResult Get()
        {
            return Ok( new { name = User.Identity.Name});
        }
    }
}

Kontroler HelloController jest ozdobiony atrybutem AuthorizeAttribute, który ogranicza dostęp tylko do uwierzytelnionych użytkowników.

Kontroler jest również ozdobiony elementem [RequiredScope("tasks.read")]. Element RequiredScopeAttribute sprawdza, czy internetowy interfejs API jest wywoływany z odpowiednimi zakresami: tasks.read.

Krok 5. Konfigurowanie serwera internetowego

W środowisku deweloperskim ustaw interfejs API w sieci do nasłuchiwania przychodzących żądań HTTP lub HTTPS na określonym numerze portu. W tym przykładzie użyj portu HTTP 6000 i portu HTTPS 6001. Podstawowy identyfikator URI internetowego interfejsu API to http://localhost:6000 dla protokołu HTTP i https://localhost:6001 dla HTTPS.

Dodaj następujący fragment kodu JSON do pliku appsettings.json .

"Kestrel": {
    "EndPoints": {
      "Http": {
        "Url": "http://localhost:6000"
      },
      "Https": {
         "Url": "https://localhost:6001"   
        }
    }
  }

Krok 6. Konfigurowanie internetowego interfejsu API

Dodaj konfiguracje do pliku konfiguracji. Plik zawiera informacje o dostawcy tożsamości usługi Azure AD B2C. Aplikacja API wykorzystuje te informacje do weryfikacji tokenu dostępu, który aplikacja internetowa przekazuje jako token nosiciela.

W folderze głównym projektu otwórz plik appsettings.json , a następnie dodaj następujące ustawienia:

{
  "AzureAdB2C": {
    "Instance": "https://contoso.b2clogin.com",
    "Domain": "contoso.onmicrosoft.com",
    "ClientId": "<web-api-app-application-id>",
    "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
    "SignUpSignInPolicyId": "<your-sign-up-in-policy>"
  },
  // More settings here
}

W pliku appsettings.json zaktualizuj następujące właściwości:

Sekcja Klucz Wartość
AzureAdB2C Wystąpienie Pierwsza część nazwy dzierżawcy usługi Azure AD B2C (na przykład https://contoso.b2clogin.com).
AzureAdB2C Domena Pełna nazwa dzierżawcy usługi Azure AD B2C (na przykład contoso.onmicrosoft.com).
AzureAdB2C ClientId Identyfikator aplikacji webowego API. Na powyższym diagramie jest to aplikacja o identyfikatorze aplikacji: 2. Aby dowiedzieć się, jak uzyskać identyfikator rejestracyjny aplikacji interfejsu API sieciowego, zapoznaj się z sekcją Wymagania wstępne.
AzureAdB2C SignUpSignInPolicyId (Identyfikator Polityki Rejestracji i Logowania) Przepływy użytkowe lub polityki niestandardowe. Aby się dowiedzieć, jak uzyskać przepływ pracy użytkownika lub polityki, zobacz Wymagania wstępne.

Krok 7. Uruchamianie i testowanie internetowego interfejsu API

Na koniec uruchom internetowy interfejs API przy użyciu ustawień środowiska usługi Azure AD B2C.

W powłoce poleceń rozpocznij działanie aplikacji internetowej, wykonując następujące polecenie:

 dotnet run

Powinny zostać wyświetlone następujące dane wyjściowe, co oznacza, że aplikacja jest uruchomiona i gotowa do odbierania żądań.

Now listening on: http://localhost:6000

Aby zatrzymać program, w powłoce poleceń naciśnij Ctrl+C. Aplikację można ponownie uruchomić za pomocą node app.js polecenia .

Wskazówka

Alternatywnie, aby uruchomić dotnet run polecenie, możesz użyć debugera programu Visual Studio Code. Wbudowany debuger programu Visual Studio Code pomaga przyspieszyć edytowanie, kompilowanie i pętlę debugowania.

Otwórz przeglądarkę i przejdź pod adres http://localhost:6000/public. W oknie przeglądarki powinien zostać wyświetlony następujący tekst wraz z bieżącą datą i godziną.

Krok 8. Wywoływanie internetowego interfejsu API z aplikacji

Spróbuj wywołać chroniony internetowy punkt końcowy interfejsu API bez tokenu dostępu. Otwórz przeglądarkę i przejdź pod adres http://localhost:6000/hello. Interfejs API zwraca nieautoryzowany komunikat o błędzie HTTP, potwierdzając, że interfejs API jest chroniony za pomocą tokenu typu bearer.

Kontynuuj konfigurowanie aplikacji w celu wywołania internetowego interfejsu API. Aby uzyskać wskazówki, zobacz sekcję Wymagania wstępne .

Obejrzyj ten film wideo, aby dowiedzieć się więcej o najlepszych rozwiązaniach dotyczących integracji usługi Azure AD B2C z interfejsem API.

Uzyskaj kompletny przykład w usłudze GitHub: