Kurz: Volání chráněného webového rozhraní API z aplikace démona .NET
Tento kurz je poslední částí série, která ukazuje, jak volat chráněné webové rozhraní API z aplikace démona .NET. V první části této série jste připravili externího tenanta na autorizaci aplikace démona .NET. V tomto kurzu sestavíte klientskou aplikaci démona a zavoláte chráněné webové rozhraní API. Aplikaci démon klienta povolíte, aby získala přístupový token pomocí vlastní identity a pak volala webové rozhraní API.
V tomto kurzu;
- Nakonfigurujte aplikaci démona tak, aby používala podrobnosti o registraci aplikace.
- Vytvořte aplikaci démona, která získá token vlastním jménem a zavolá chráněné webové rozhraní API.
Požadavky
Vytvoření aplikace démona .NET
Otevřete terminál a přejděte do složky, ve které má projekt žít.
Inicializujte konzolovou aplikaci .NET a přejděte do její kořenové složky.
dotnet new console -n ToDoListClient cd ToDoListClient
Instalace balíčků
Instalace Microsoft.Identity.Web
a Microsoft.Identity.Web.DownstreamApi
balíčky:
dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.DownstreamApi
Microsoft.Identity.Web
poskytuje připevnění mezi ASP.NET Core, middlewarem ověřování a knihovnou MSAL (Microsoft Authentication Library) pro .NET, což usnadňuje přidávání možností ověřování a autorizace do aplikace. Microsoft.Identity.Web.DownstreamApi
poskytuje rozhraní sloužící k volání podřízeného rozhraní API.
Vytvoření souboru appsettings.json přidání konfigurací registrace
Vytvořte soubor appsettings.json v kořenové složce aplikace.
Do souboru appsettings.json přidejte podrobnosti o registraci aplikace.
{ "AzureAd": { "Authority": "https://<Enter_the_Tenant_Subdomain_Here>.ciamlogin.com/", "ClientId": "<Enter_the_Application_Id_here>", "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "<Enter_the_Client_Secret_Here>" } ] }, "DownstreamApi": { "BaseUrl": "<Web_API_base_url>", "RelativePath": "api/todolist", "RequestAppToken": true, "Scopes": [ "api://<Enter_the_Web_Api_Application_Id_Here>/.default" ] } }
Nahraďte následující hodnoty vlastními hodnotami:
Hodnota Popis Enter_the_Application_Id_Here ID aplikace (klienta) aplikace démon klienta, kterou jste zaregistrovali. Enter_the_Tenant_Subdomain_Here Subdoména adresáře (tenanta). Enter_the_Client_Secret_Here Hodnota tajného kódu aplikace démona, kterou jste vytvořili. Enter_the_Web_Api_Application_Id_Here ID aplikace (klienta) aplikace webového rozhraní API, kterou jste zaregistrovali. Web_API_base_url Základní adresa URL webového rozhraní API. Například když https://localhost:44351/
44351 je číslo portu, na kterém vaše rozhraní API běží. Vaše rozhraní API by už mělo být spuštěné a čeká na žádosti v této fázi, abyste získali tuto hodnotu.
Přidání modelů
Přejděte do kořenové složky projektu a vytvořte složku modelů . Ve složce models vytvořte soubor ToDo.cs a přidejte následující kód:
using System;
namespace ToDoListClient.Models;
public class ToDo
{
public int Id { get; set; }
public Guid Owner { get; set; }
public string Description { get; set; } = string.Empty;
}
Získání přístupového tokenu
Právě jste nakonfigurovali požadované položky pro aplikaci démona. V tomto kroku napíšete kód, který aplikaci démona umožní získat přístupový token.
Otevřete soubor program.cs v editoru kódu a odstraňte jeho obsah.
Přidejte do souboru balíčky.
using Microsoft.Extensions.DependencyInjection; using Microsoft.Identity.Abstractions; using Microsoft.Identity.Web; using ToDoListClient.Models;
Vytvořte instanci získání tokenu.
GetDefaultInstance
K sestavení instance získání tokenu použijte metoduTokenAcquirerFactory
třídyMicrosoft.Identity.Web
balíčku. Ve výchozím nastavení instance načte soubor appsettings.json , pokud existuje ve stejné složce jako aplikace.GetDefaultInstance
také nám umožňuje přidávat služby do kolekce služeb.Do souboru program.cs přidejte tento řádek kódu:
var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
Nakonfigurujte možnosti aplikace, které se mají číst z konfigurace, a přidejte
DownstreamApi
službu. SlužbaDownstreamApi
poskytuje rozhraní, které slouží k volání podřízeného rozhraní API. Tuto službu v objektu konfigurace nazýváme DownstreamAPI . Aplikace démona načte konfigurace podřízeného rozhraní API z části DownstreamApi appsettings.json. Ve výchozím nastavení získáte mezipaměť tokenů v paměti.Do souboru program.cs přidejte následující fragment kódu:
const string ServiceName = "DownstreamApi"; tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName, tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));
Sestavte získání tokenu. Tím se vytvoří všechny služby, které jste přidali do služeb, a vrátí poskytovatele služeb. Pomocí tohoto poskytovatele služeb získáte přístup k přidanému prostředku rozhraní API. V tomto případě jste jako podřízenou službu přidali pouze jeden prostředek rozhraní API, ke kterému chcete získat přístup.
Do souboru program.cs přidejte následující fragment kódu:
var serviceProvider = tokenAcquirerFactory.Build();
Volání webového rozhraní API
Přidejte kód pro volání chráněného webového IDownstreamApi
rozhraní API pomocí rozhraní. V tomto kurzu implementujete pouze volání Post a další, abyste získali všechny todo. Podívejte se na další implementace, jako je Delete a Put v ukázkovém kódu.
Do souboru program.cs přidejte tento řádek kódu:
var toDoApiClient = serviceProvider.GetRequiredService<IDownstreamApi>();
Console.WriteLine("Posting a to-do...");
var firstNewToDo = await toDoApiClient.PostForAppAsync<ToDo, ToDo>(
ServiceName,
new ToDo()
{
Owner = Guid.NewGuid(),
Description = "Bake bread"
});
await DisplayToDosFromServer();
async Task DisplayToDosFromServer()
{
Console.WriteLine("Retrieving to-do's from server...");
var toDos = await toDoApiClient!.GetForAppAsync<IEnumerable<ToDo>>(
ServiceName,
options => options.RelativePath = "/api/todolist"
);
if (!toDos!.Any())
{
Console.WriteLine("There are no to-do's in server");
return;
}
Console.WriteLine("To-do data:");
foreach (var toDo in toDos!) {
DisplayToDo(toDo);
}
}
void DisplayToDo(ToDo toDo) {
Console.WriteLine($"ID: {toDo.Id}");
Console.WriteLine($"User ID: {toDo.Owner}");
Console.WriteLine($"Message: {toDo.Description}");
}
Spuštění aplikace démona klienta
Přejděte do kořenové složky aplikace démon a spusťte následující příkaz:
dotnet run
Pokud je všechno v pořádku, měl by se v terminálu zobrazit následující výstup.
Posting a to-do...
Retrieving to-do's from server...
To-do data:
ID: 1
User ID: 00aa00aa-bb11-cc22-dd33-44ee44ee44ee
Message: Bake bread
Odstraňování potíží
V případě, že narazíte na chyby,
- Potvrďte podrobnosti registrace, které jste přidali do souboru appsettings.json.
- Ověřte, že voláte webové rozhraní API přes správný port a přes https.
- Ověřte, že máte správně nakonfigurovaná oprávnění aplikace.
Úplný ukázkový kód je k dispozici na GitHubu.
Vyčištění prostředků
Pokud nemáte v úmyslu používat aplikace, které jste zaregistrovali a vytvořili v tomto kurzu, odstraňte je, abyste se vyhnuli vzniku jakýchkoli nákladů.