#### [Abblix\.SecurityEvents](https://www.abblix.com/en/docs/api/abblix-securityevents 'index')
### [Abblix\.SecurityEvents\.BackChannelLogout\.Steps](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.BackChannelLogout.Steps 'Abblix\.SecurityEvents\.BackChannelLogout\.Steps')

## LogoutTokenTypeStep Class

Accepts a Logout Token that carries no `typ`, and refuses one typed as something else\.

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

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

Implements [ISecurityCriticalValidator](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Validation.ISecurityCriticalValidator 'Abblix\.SecurityEvents\.Validation\.ISecurityCriticalValidator'), [ISecurityEventTokenValidator](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator 'Abblix\.SecurityEvents\.Validation\.ISecurityEventTokenValidator')

### Remarks
The step it replaces pins the SET's own type, and dropping that pin without putting one back
would leave the profile with no answer to cross\-JWT confusion at the header at all\. What it may
not do is demand the logout type\. OpenID Connect Back\-Channel Logout 1\.0 Section 4\.1 offers
explicit typing and rules out requiring it in the same breath: "Including an explicit type in
issued Logout Tokens is a best practice\. Note however, that requiring explicitly typed Logout
Tokens will break most existing deployments, as existing OPs and RPs are already commonly using
untyped Logout Tokens\." A receiver that required it would refuse conformant providers, so the
rule here is one\-sided: an absent type is accepted, a foreign one is not\.

Security-critical, because it stands where the profile's confusion wall at the header stands.
The wall it can build is lower than the SET's by the specification's own instruction, and the
claims the profile demands below - a logout event, no nonce, a subject or a session - are what
carry the rest of the weight.
### Methods

## LogoutTokenTypeStep\.ValidateAsync\(SecurityEventTokenValidationContext, CancellationToken\) Method {#Abblix.SecurityEvents.BackChannelLogout.Steps.LogoutTokenTypeStep.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` [SecurityEventTokenValidationContext](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext 'Abblix\.SecurityEvents\.Validation\.SecurityEventTokenValidationContext') {#Abblix.SecurityEvents.BackChannelLogout.Steps.LogoutTokenTypeStep.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.SecurityEvents.BackChannelLogout.Steps.LogoutTokenTypeStep.ValidateAsync(Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext,System.Threading.CancellationToken).cancellationToken}

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

Implements [ValidateAsync\(SecurityEventTokenValidationContext, CancellationToken\)](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator#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')[SecurityEventTokenValidationError](https://www.abblix.com/en/docs/api/abblix-securityevents/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\.
