using System.Text; using Fido2NetLib; using Fido2NetLib.Objects; using Microsoft.AspNetCore.Mvc; using Passwordless; var builder = WebApplication.CreateBuilder(args); // Add services to the container. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddFido2(options => { options.ServerDomain = "localhost"; options.ServerName = "FIDO2 Test"; options.Origins = ["http://localhost:5172"]; options.TimestampDriftTolerance = 300000; }); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseStaticFiles(); app.UseHttpsRedirection(); app.MapGet("/buildCredentialOptions", ([FromQuery] string login, IFido2 fido2) => { var data = File.ReadAllText("./data/test.json"); var loginDisplay = Encoding.UTF8.GetString(Convert.FromBase64String(login)); var loginName = NameTransform.ToFileName(loginDisplay); var user = new Fido2User { DisplayName = loginDisplay, Id = Convert.FromBase64String(login), Name = loginName, }; var authenticatorSelection = new AuthenticatorSelection { UserVerification = UserVerificationRequirement.Discouraged, RequireResidentKey = false, }; var extensions = new AuthenticationExtensionsClientInputs { Extensions = true, UserVerificationMethod = false, }; var options = fido2.RequestNewCredential(user, new List(), authenticatorSelection, AttestationConveyancePreference.None, extensions); return options; }) .WithName("BuildCredentialOptions") .WithOpenApi(); app.Run();