#### [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')

## ForbidSubStep Class

Requires the claims to carry no "sub": SSF identifies the subject through the structured
top\-level "sub\_id" alone, and "The JWT 'sub' claim MUST NOT be present in any SET containing
an SSF event" \(SSF 1\.0 Section 4\.1\.2\) \- one of the restrictions Section 4\.1\.3 adds to keep
SSF SETs from being confused with other kinds of JWTs\.

```csharp
public sealed class ForbidSubStep : Abblix.SecurityEvents.Validation.ISecurityCriticalValidator, Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator
```

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

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

### Remarks
The check is on the member's PRESENCE, before any signature work, for the same reasons the
core profile checks "exp" that way: a malformed "sub" marks a non\-SSF token exactly as a
well\-formed one does, and a rejection this cheap should not cost a signature check\.
### Methods

## ForbidSubStep\.ValidateAsync\(SecurityEventTokenValidationContext, CancellationToken\) Method {#Abblix.SharedSignals.Receiver.SecurityEvent.ForbidSubStep.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.ForbidSubStep.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.ForbidSubStep.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\.
