Still working on getting client credential flow complete, most of the request works but still working on generating the JWT.
This commit is contained in:
parent
1a8c63808a
commit
8782ef39c6
80 changed files with 1331 additions and 414 deletions
|
|
@ -6,9 +6,9 @@ namespace IdentityShroud.Api;
|
|||
public class ClientCreateRequestValidator : AbstractValidator<ClientCreateRequest>
|
||||
{
|
||||
// most of standard ascii minus the control characters and space
|
||||
private const string ClientIdPattern = "^[\x21-\x7E]+";
|
||||
private const string ClientIdPattern = "^[a-zA-Z0-9_-]+";
|
||||
|
||||
private string[] AllowedAlgorithms = [ "RS256", "ES256" ];
|
||||
private readonly string[] _allowedAlgorithms = [ "RS256", "ES256" ];
|
||||
|
||||
public ClientCreateRequestValidator()
|
||||
{
|
||||
|
|
@ -16,7 +16,9 @@ public class ClientCreateRequestValidator : AbstractValidator<ClientCreateReques
|
|||
RuleFor(e => e.Name).MaximumLength(80);
|
||||
RuleFor(e => e.Description).MaximumLength(2048);
|
||||
RuleFor(e => e.SignatureAlgorithm)
|
||||
.Must(v => v is null || AllowedAlgorithms.Contains(v))
|
||||
.WithMessage($"SignatureAlgorithm must be one of {string.Join(", ", AllowedAlgorithms)} or null");
|
||||
.Must(v => v is null || _allowedAlgorithms.Contains(v))
|
||||
.WithMessage($"SignatureAlgorithm must be one of {string.Join(", ", _allowedAlgorithms)} or null");
|
||||
RuleFor(e => e.AllowClientCredentialsFlow).Must(v => v is not true).When(e => e.Confidential is not true);
|
||||
RuleFor(e => e.GenerateSecret).Must(v => v is not true).When(e => e.Confidential is not true);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
using FluentValidation;
|
||||
|
||||
namespace IdentityShroud.Api;
|
||||
|
||||
public class ValidateFilter<T> : IEndpointFilter where T : class
|
||||
{
|
||||
public async ValueTask<object?> InvokeAsync(
|
||||
EndpointFilterInvocationContext context,
|
||||
EndpointFilterDelegate next)
|
||||
{
|
||||
// Grab the deserialized argument (the DTO) from the context.
|
||||
// The order of arguments matches the order of parameters in the endpoint delegate.
|
||||
var dto = context.Arguments
|
||||
.FirstOrDefault(arg => arg is T) as T;
|
||||
|
||||
if (dto == null)
|
||||
return Results.BadRequest("Unable to read request body.");
|
||||
|
||||
// Resolve the matching validator from DI.
|
||||
var validator = context.HttpContext.RequestServices
|
||||
.GetService<IValidator<T>>();
|
||||
|
||||
if (validator != null)
|
||||
{
|
||||
var validationResult = await validator.ValidateAsync(dto);
|
||||
if (!validationResult.IsValid)
|
||||
return Results.ValidationProblem(validationResult.ToDictionary());
|
||||
}
|
||||
|
||||
// Validation passed – continue to the actual handler.
|
||||
return await next(context);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue