Testowanie chronionego interfejsu API
Ten samouczek jest ostatnią częścią serii, która demonstruje tworzenie i testowanie chronionego internetowego interfejsu API zarejestrowanego w dzierżawie zewnętrznej. W części 1 tej serii utworzono internetowy interfejs API platformy ASP.NET Core i chroniono jego punkty końcowe. W tym ostatnim kroku zarejestrujesz aplikację demona i przetestujesz interfejs API.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Testowanie chronionego internetowego interfejsu API przy użyciu lekkiej aplikacji demona, która wywołuje internetowy interfejs API
Wymagania wstępne
Rejestrowanie aplikacji demona
W poniższych krokach pokazano, jak zarejestrować aplikację demona w centrum administracyjnym firmy Microsoft Entra:
Zaloguj się do centrum administracyjnego firmy Microsoft Entra co najmniej jako deweloper aplikacji.
Jeśli masz dostęp do wielu dzierżaw, użyj ikony Ustawienia w górnym menu, aby przełączyć się do dzierżawy zewnętrznej z menu Katalogi i subskrypcje.
Przejdź do aplikacji tożsamości>> Rejestracje aplikacji.
Wybierz pozycję + Nowa rejestracja.
Na wyświetlonej stronie Rejestrowanie aplikacji wprowadź informacje o rejestracji aplikacji:
W sekcji Nazwa wprowadź zrozumiałą nazwę aplikacji, która będzie wyświetlana użytkownikom aplikacji, na przykład ciam-client-app.
W obszarze Obsługiwane typy kont wybierz pozycję Konta tylko w tym katalogu organizacyjnym.
Wybierz pozycję Zarejestruj.
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.
Utwórz klucz tajny klienta dla zarejestrowanej aplikacji. Aplikacja używa wpisu tajnego klienta, aby udowodnić swoją tożsamość, gdy żąda tokenów.
- Na stronie Rejestracje aplikacji wybierz utworzoną aplikację (np. ciam-client-app), aby otworzyć stronę Przegląd.
- W obszarze Zarządzanie wybierz pozycję Certyfikaty i wpisy tajne.
- Wybierz Nowy klucz tajny klienta.
- W polu Opis wprowadź opis wpisu tajnego klienta (na przykład wpis tajny klienta aplikacji ciam).
- 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.
- 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.
Przypisywanie roli aplikacji do aplikacji demona
Aplikacje uwierzytelniające się samodzielnie wymagają uprawnień aplikacji.
Na stronie Rejestracje aplikacji wybierz utworzoną aplikację, na przykład ciam-client-app.
W obszarze Zarządzanie wybierz pozycję Uprawnienia interfejsu API.
W obszarze Skonfigurowane uprawnienia wybierz pozycję Dodaj uprawnienie.
Wybierz kartę Interfejsy API używane przez moją organizację.
Na liście interfejsów API wybierz interfejs API, taki jak ciam-ToDoList-api.
Wybierz opcję Uprawnienia aplikacji. Wybieramy tę opcję, gdy aplikacja loguje się jako sama, ale nie w imieniu użytkownika.
Z listy uprawnień wybierz pozycję TodoList.Read.All, ToDoList.ReadWrite.All (w razie potrzeby użyj pola wyszukiwania).
Wybierz przycisk Dodaj uprawnienia.
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:
- Wybierz pozycję Udziel zgody administratora dla <swojej nazwy> dzierżawy, a następnie wybierz pozycję Tak.
- Wybierz pozycję Odśwież, a następnie sprawdź, czy w obszarze Stan dla obu uprawnień jest wyświetlana wartość Przyznane dla <nazwy> dzierżawy.
Pisanie kodu
Inicjowanie aplikacji konsolowej platformy .NET i przechodzenie do folderu głównego
dotnet new console -o MyTestApp cd MyTestApp
Zainstaluj bibliotekę MSAL, aby ułatwić obsługę uwierzytelniania, uruchamiając następujące polecenie:
dotnet add package Microsoft.Identity.Client
Uruchom projekt interfejsu API i zanotuj port, na którym jest uruchomiony.
Otwórz plik Program.cs i zastąp kod "Hello world" następującym kodem.
using System; using System.Net.Http; using System.Net.Http.Headers; HttpClient client = new HttpClient(); var response = await client.GetAsync("https://localhost:<your-api-port>/api/todolist"); Console.WriteLine("Your response is: " + response.StatusCode);
Przejdź do katalogu głównego aplikacji demona i uruchom aplikację przy użyciu polecenia
dotnet run
. Ten kod wysyła żądanie bez tokenu dostępu. Powinien zostać wyświetlony ciąg: Odpowiedź to: Brak autoryzacji wydrukowany w konsoli.Usuń kod w kroku 4 i zastąp element poniższym kodem, aby przetestować interfejs API, wysyłając żądanie z prawidłowym tokenem dostępu.
using Microsoft.Identity.Client; using System; using System.Net.Http; using System.Net.Http.Headers; HttpClient client = new HttpClient(); var clientId = "<your-daemon-app-client-id>"; var clientSecret = "<your-daemon-app-secret>"; var scopes = new[] {"api://<your-web-api-application-id>/.default"}; var tenantName= "<your-tenant-name>"; var authority = $"https://{tenantName}.ciamlogin.com/"; var app = ConfidentialClientApplicationBuilder .Create(clientId) .WithAuthority(authority) .WithClientSecret(clientSecret) .Build(); var result = await app.AcquireTokenForClient(scopes).ExecuteAsync(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); var response = await client.GetAsync("https://localhost:44351/api/todolist"); Console.WriteLine("Your response is: " + response.StatusCode);
Przejdź do katalogu głównego aplikacji demona i uruchom aplikację przy użyciu polecenia
dotnet run
. Ten kod wysyła żądanie z prawidłowym tokenem dostępu. Powinien zostać wyświetlony ciąg: Odpowiedź brzmi: OK wydrukowane w konsoli.