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);
Implementar um cliente de autenticação HMAC no ASP.NET Core
O cliente de autenticação HMAC deve ser um projeto de aplicativo de console. Para nosso exemplo, simularemos um serviço de pedido simples. O cliente constrói a solicitação criando uma instância de pedido, serializando-a e assinando a mensagem usando a classe auxiliar compartilhada. Finalmente, o cliente invoca a API enviando os dados JSON e os cabeçalhos de autenticação necessários. Tudo isso é mostrado na listagem de códigos fornecida abaixo.
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);
Autenticação HMAC em ação
Para executar esse aplicativo, primeiro defina os projetos de API Web (HmacDemoApi) e Aplicativo de Console (HmacDemoApiClient) como projetos iniciais no Visual Studio. Depois de definir a API Web e o Aplicativo de Console como projetos iniciais e executar o aplicativo no Visual Studio, você observará que o projeto de API Web iniciará uma página Web e o Aplicativo de Console iniciará uma janela de Comando.
A Figura 2 abaixo mostra como o aplicativo cliente captura a resposta do servidor e a exibe na janela Console.
