ValidationProfile Class
One named validation profile under construction: the editing surface AddSecurityEventValidationProfile(this IServiceCollection, object, Action<ValidationProfile>) hands to its configure delegate.
public sealed class ValidationProfileInheritance System.Object → ValidationProfile
Remarks
A profile exists because two consumers of security event tokens in one host can demand
CONTRADICTORY things of the same claim - Back-Channel Logout requires exp where a Shared
Signals SET forbids it, and each pins its own typ - so no single pipeline can serve both.
A profile is a keyed family one consumer owns outright: it lists its own steps in the order they
judge a token, declares its own critical steps, records its own allowances, and resolves its
validator by its key, while every other profile stays exactly as its owner composed it. There is
no unnamed profile to fall back to: naming is what makes ownership visible.
Properties
ValidationProfile.Key Property
The key this profile's validator resolves under.
public object Key { get; }Property Value
ValidationProfile.Steps Property
The live cursor over this profile's steps, in execution order. Plain descriptors are accepted - the cursor keys them to this profile on insert - and edits here touch no other profile.
public Abblix.DependencyInjection.IComposition<Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator> Steps { get; }Property Value
Abblix.DependencyInjection.IComposition<ISecurityEventTokenValidator>
Remarks
Reading this composes the profile, which is why it is a property with a body rather than one assigned in the constructor: a cursor is a view of a composed family, and a profile is composed once it has stopped being listed. Listing through Use<TStep>() before the first read is therefore ordinary, and editing after it is ordinary too - what cannot happen is composing an empty family, since composition of nothing is a no-op that would leave the profile with no validator at all.
Methods
ValidationProfile.AddCriticalStep<TStep>() Method
Declares TStep as a step THIS profile may not lose without an allowance on record.
public Abblix.SecurityEvents.Infrastructure.ValidationProfile AddCriticalStep<TStep>()
where TStep : class, Abblix.SecurityEvents.Validation.ISecurityCriticalValidator;Type parameters
TStep
Returns
Remarks
Scoped rather than global on purpose: a package's step is critical for the profile that carries it, and a global declaration would make every OTHER profile's guard demand a step that was never meant for it.
ValidationProfile.AllowInsecureValidation<TStep>(string) Method
Acknowledges that this profile drops or replaces TStep, a security-critical default, and why. The guard logs every allowance at first resolve, so the weakening stays visible in the boot log.
public Abblix.SecurityEvents.Infrastructure.ValidationProfile AllowInsecureValidation<TStep>(string reason)
where TStep : class, Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator;Type parameters
TStep
The security-critical default this profile does not carry.
Parameters
reason System.String
Why this profile is right not to carry it.
Returns
Remarks
The allowance names the step it excuses, and excuses only that one. An allowance that excused "some critical step" would excuse every future one too: a profile carrying two reasoned departures would silently absorb a third, added to the core long after anyone read this profile - and the third could be the step that keeps an attacker-named issuer from deciding which keys are fetched.
ValidationProfile.Use<TStep>() Method
Appends TStep to the end of this profile's pipeline.
public Abblix.SecurityEvents.Infrastructure.ValidationProfile Use<TStep>()
where TStep : class, Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator;Type parameters
TStep
Returns
Remarks
A profile states its pipeline by listing it, so the order a token is judged in is the order written here rather than a baseline the reader has to know plus the edits made to it. The list is not what makes a profile safe - the guard does that, by demanding an allowance for every security-critical default the list leaves out - so leaving one out is a decision that has to be written down, whether it was made deliberately or by forgetting.