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

## ILogoutNotificationSink Interface

Where validated logout orders land: the application's half of the receiver, called once per
accepted Logout Token with the notification already carrying its provider's authority\.

```csharp
public interface ILogoutNotificationSink
```

### Remarks

This is the work OpenID Connect Back-Channel Logout 1.0 Section 2.7 gives the RP: "locate the
session(s) identified by the iss and sub Claims and/or the sid Claim", then "clear any state
associated with the identified session(s)". Only the application knows where it keeps them,
which is why the library validates and stops here.

Processing must be idempotent. The replay guard in front of this sink refuses a token it has
already recorded, but a provider may legitimately end the same session twice - a second logout
after a re-login - and Section 2.5 permits a retransmission when the provider suspects the
first failed.

The verdict is the sink's to give: null answers the provider with success, a description
travels back in the 400 response. Section 2.8 makes both outcomes the RP's own statement -
"if the logout request was invalid or the logout FAILED" - so a sink that could not end the
sessions says so rather than acknowledging work it did not do.
### Methods

## ILogoutNotificationSink\.ConsumeAsync\(LogoutNotification, CancellationToken\) Method {#Abblix.SecurityEvents.BackChannelLogout.ILogoutNotificationSink.ConsumeAsync(Abblix.SecurityEvents.BackChannelLogout.LogoutNotification,System.Threading.CancellationToken)}

Acts on one validated logout order\.

```csharp
System.Threading.Tasks.Task<string?> ConsumeAsync(Abblix.SecurityEvents.BackChannelLogout.LogoutNotification notification, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));
```
#### Parameters

###### `notification` [LogoutNotification](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.BackChannelLogout.LogoutNotification 'Abblix\.SecurityEvents\.BackChannelLogout\.LogoutNotification') {#Abblix.SecurityEvents.BackChannelLogout.ILogoutNotificationSink.ConsumeAsync(Abblix.SecurityEvents.BackChannelLogout.LogoutNotification,System.Threading.CancellationToken).notification}

Which sessions the provider says to end\.

###### `cancellationToken` [System\.Threading\.CancellationToken](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken 'System\.Threading\.CancellationToken') {#Abblix.SecurityEvents.BackChannelLogout.ILogoutNotificationSink.ConsumeAsync(Abblix.SecurityEvents.BackChannelLogout.LogoutNotification,System.Threading.CancellationToken).cancellationToken}

Cancels the processing\.

#### Returns
[System\.Threading\.Tasks\.Task&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')  
Null to answer success, or a human\-readable account of why the logout failed\.
