#### [Abblix\.SharedSignals](https://www.abblix.com/en/docs/api/abblix-sharedsignals 'index')
### [Abblix\.SharedSignals\.Receiver\.SecurityEvent](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Receiver.SecurityEvent 'Abblix\.SharedSignals\.Receiver\.SecurityEvent')

## CriticalSubjectMembersStep Class

Enforces the receiver half of subject processing \(SSF 1\.0 Section 3\.6\): an event whose
subject carries a critical member this receiver cannot interpret is discarded, never
processed with the member silently dropped \- acting on a subject while blind to a member the
transmitter declared essential could act on the wrong principal\.

```csharp
public sealed class CriticalSubjectMembersStep : Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator
```

Inheritance [System\.Object](https://learn.microsoft.com/en-us/dotnet/api/system.object 'System\.Object') → CriticalSubjectMembersStep

Implements [Abblix\.SecurityEvents\.Validation\.ISecurityEventTokenValidator](https://learn.microsoft.com/en-us/dotnet/api/abblix.securityevents.validation.isecurityeventtokenvalidator 'Abblix\.SecurityEvents\.Validation\.ISecurityEventTokenValidator')

### Remarks
"Unable to process" is structural here: a complex\-subject member the subject vocabulary
interprets lands in a typed property, and one it cannot interpret survives only as raw JSON
in [Abblix\.SecurityEvents\.Subjects\.ComplexSubject\.AdditionalMembers](https://learn.microsoft.com/en-us/dotnet/api/abblix.securityevents.subjects.complexsubject.additionalmembers 'Abblix\.SecurityEvents\.Subjects\.ComplexSubject\.AdditionalMembers') \- which is exactly the set this step
checks the critical names against\. A "sub\_id" that does not parse at all is rejected on the
same reasoning: a receiver that cannot name the subject cannot process any member of it\.
An absent "sub\_id" passes \- whether the claim is required at all belongs to the event's own
rules, not to this step\.
### Methods

## CriticalSubjectMembersStep\.ValidateAsync\(SecurityEventTokenValidationContext, CancellationToken\) Method {#Abblix.SharedSignals.Receiver.SecurityEvent.CriticalSubjectMembersStep.ValidateAsync(Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext,System.Threading.CancellationToken)}

Checks the token in flight\.

```csharp
public System.Threading.Tasks.ValueTask<Abblix.SecurityEvents.Validation.SecurityEventTokenValidationError?> ValidateAsync(Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext context, System.Threading.CancellationToken cancellationToken);
```
#### Parameters

###### `context` [Abblix\.SecurityEvents\.Validation\.SecurityEventTokenValidationContext](https://learn.microsoft.com/en-us/dotnet/api/abblix.securityevents.validation.securityeventtokenvalidationcontext 'Abblix\.SecurityEvents\.Validation\.SecurityEventTokenValidationContext') {#Abblix.SharedSignals.Receiver.SecurityEvent.CriticalSubjectMembersStep.ValidateAsync(Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext,System.Threading.CancellationToken).context}

The state accumulated by earlier steps\.

###### `cancellationToken` [System\.Threading\.CancellationToken](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken 'System\.Threading\.CancellationToken') {#Abblix.SharedSignals.Receiver.SecurityEvent.CriticalSubjectMembersStep.ValidateAsync(Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext,System.Threading.CancellationToken).cancellationToken}

Cancels I/O the step performs, such as key retrieval\.

Implements [ValidateAsync\(SecurityEventTokenValidationContext, CancellationToken\)](https://learn.microsoft.com/en-us/dotnet/api/abblix.securityevents.validation.isecurityeventtokenvalidator.validateasync#abblix-securityevents-validation-isecurityeventtokenvalidator-validateasync(abblix-securityevents-validation-securityeventtokenvalidationcontext-system-threading-cancellationtoken) 'Abblix\.SecurityEvents\.Validation\.ISecurityEventTokenValidator\.ValidateAsync\(Abblix\.SecurityEvents\.Validation\.SecurityEventTokenValidationContext,System\.Threading\.CancellationToken\)')

#### Returns
[System\.Threading\.Tasks\.ValueTask&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.valuetask-1 'System\.Threading\.Tasks\.ValueTask\`1')[Abblix\.SecurityEvents\.Validation\.SecurityEventTokenValidationError](https://learn.microsoft.com/en-us/dotnet/api/abblix.securityevents.validation.securityeventtokenvalidationerror 'Abblix\.SecurityEvents\.Validation\.SecurityEventTokenValidationError')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.valuetask-1 'System\.Threading\.Tasks\.ValueTask\`1')  
Null to pass the token on; an error to stop the pipeline with that verdict\.
