using HmacDemoApi;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
builder.Services.AddOpenApi();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
}
// Enable HMAC protection across your entire API pipeline
app.UseMiddleware();
app.MapPost("/api/data", (OrderRequest order, HttpContext context) =>
{
var user = context.User.Identity?.Name; // "Client_App_01"
return Results.Ok($"Product {order.ProductId} from {user}");
});
app.Run();
public record OrderRequest(int ProductId, int Quantity);
Implémenter un client d’authentification HMAC dans ASP.NET Core
Le client d’authentification HMAC doit être un projet d’application console. Pour notre exemple, nous allons nous moquer d’un simple service de commande. Le client crée la demande en créant une instance de commande, en la sérialisant et en signant le message à l’aide de la classe d’assistance partagée. Enfin, le client invoque l’API en envoyant les données JSON et les en-têtes d’authentification requis. Tout cela est affiché dans la liste de codes ci-dessous.
using HmacDemoSharedLibrary;
using System.Text;
using System.Text.Json;
Console.WriteLine("Press any key to invoke...");
Console.ReadLine();
await HmacClient.SendSecurePostRequestAsync();
Console.WriteLine("Press any key to stop...");
Console.ReadLine();
public class HmacClient
{
private static readonly HttpClient client = new HttpClient();
public static async Task SendSecurePostRequestAsync()
{
string url = "https://localhost:44399/api/data";
string path = "/api/data";
var order = new OrderRequest(101, 5);
string jsonBody = JsonSerializer.Serialize(order);
string timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
string method = "POST";
string payload = $"{method}n{path}n{timestamp}n{jsonBody}";
string signature = HmacDemoHelper.ComputeHmacSha256(payload);
var request = new HttpRequestMessage(HttpMethod.Post, url);
request.Content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
request.Headers.Add("X-Api-Key", "Client_App_01");
request.Headers.Add("X-Timestamp", timestamp);
request.Headers.Add("X-Signature", signature);
var response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Status Code: {response.StatusCode}");
Console.WriteLine($"Server Response: {result}");
}
}
public record OrderRequest(int ProductId, int Quantity);
L’authentification HMAC en action
Pour exécuter cette application, définissez d’abord les projets Web API (HmacDemoApi) et Console App (HmacDemoApiClient) comme projets de démarrage dans Visual Studio. Après avoir défini l’API Web et l’application console comme projets de démarrage et exécuté l’application dans Visual Studio, vous remarquerez que le projet API Web lancera une page Web et que l’application console lancera une fenêtre de commande.
La figure 2 ci-dessous montre comment l’application client capture la réponse du serveur et l’affiche dans la fenêtre de la console.
