#### [Abblix\.Oidc\.Server](https://www.abblix.com/en/docs/api/abblix-oidc-server 'index')
### [Abblix\.Oidc\.Server\.Common](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common 'Abblix\.Oidc\.Server\.Common')

## ClaimsExtensions Class

Helpers for working with [System\.Security\.Claims\.ClaimsPrincipal](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claimsprincipal 'System\.Security\.Claims\.ClaimsPrincipal') and [System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim') sequences:
classify claims as registered/public/private \(per IANA\), filter or replace them by type,
and look up values by claim name in a case\-insensitive manner\.

```csharp
public static class ClaimsExtensions
```

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

## ClaimsExtensions\.ExcludeClaims\(this IEnumerable\<Claim\>, string\[\]\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.ExcludeClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string[])}

Returns the claims whose type does not match any of the given types, using case\-insensitive comparison\.

```csharp
public static System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> ExcludeClaims(this System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> claims, params string[] claimTypes);
```
#### Parameters

###### `claims` [System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1') {#Abblix.Oidc.Server.Common.ClaimsExtensions.ExcludeClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string[]).claims}

The source sequence of claims to filter\.

###### `claimTypes` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[\[\]](https://learn.microsoft.com/en-us/dotnet/api/system.array 'System\.Array') {#Abblix.Oidc.Server.Common.ClaimsExtensions.ExcludeClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string[]).claimTypes}

The claim type names to drop from the sequence\.

#### Returns
[System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')

## ClaimsExtensions\.ExcludeRegisteredClaims\(this IEnumerable\<Claim\>\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.ExcludeRegisteredClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_)}

Returns the claims whose type is not in the IANA registered list \(e\.g\. iss, sub, aud, exp\)\.
Useful when projecting only application\-specific claims into a downstream payload\.

```csharp
public static System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> ExcludeRegisteredClaims(this System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> claims);
```
#### Parameters

###### `claims` [System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1') {#Abblix.Oidc.Server.Common.ClaimsExtensions.ExcludeRegisteredClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_).claims}

#### Returns
[System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')

## ClaimsExtensions\.Find\(this IEnumerable\<Claim\>, string\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.Find(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string)}

Returns the first claim whose type matches the given name \(case\-insensitive\), or `null` when none exists\.

```csharp
public static System.Security.Claims.Claim? Find(this System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> claims, string name);
```
#### Parameters

###### `claims` [System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1') {#Abblix.Oidc.Server.Common.ClaimsExtensions.Find(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string).claims}

###### `name` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Oidc.Server.Common.ClaimsExtensions.Find(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string).name}

#### Returns
[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')

## ClaimsExtensions\.FindRequired\(this IEnumerable\<Claim\>, string\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.FindRequired(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string)}

Returns the first claim of the given name, or throws when no such claim exists\.
Use when the caller treats absence of the claim as a programming error rather than a recoverable case\.

```csharp
public static System.Security.Claims.Claim FindRequired(this System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> claims, string name);
```
#### Parameters

###### `claims` [System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1') {#Abblix.Oidc.Server.Common.ClaimsExtensions.FindRequired(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string).claims}

###### `name` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Oidc.Server.Common.ClaimsExtensions.FindRequired(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string).name}

#### Returns
[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')

#### Exceptions

[System\.InvalidOperationException](https://learn.microsoft.com/en-us/dotnet/api/system.invalidoperationexception 'System\.InvalidOperationException')  
No claim with the requested name was found\.

## ClaimsExtensions\.FindValue\(this IEnumerable\<Claim\>, string\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.FindValue(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string)}

Returns the value of the first claim whose type matches the given name, or `null` when no such claim exists\.

```csharp
public static string? FindValue(this System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> claims, string name);
```
#### Parameters

###### `claims` [System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1') {#Abblix.Oidc.Server.Common.ClaimsExtensions.FindValue(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string).claims}

###### `name` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Oidc.Server.Common.ClaimsExtensions.FindValue(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_,string).name}

#### Returns
[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')

## ClaimsExtensions\.GetPrivateClaims\(this IEnumerable\<Claim\>\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.GetPrivateClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_)}

These are the custom claims created to share information between parties that agree on using them and are neither registered or public claims\.

```csharp
public static System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> GetPrivateClaims(this System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> claims);
```
#### Parameters

###### `claims` [System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1') {#Abblix.Oidc.Server.Common.ClaimsExtensions.GetPrivateClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_).claims}

#### Returns
[System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')

## ClaimsExtensions\.GetPublicClaims\(this IEnumerable\<Claim\>\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.GetPublicClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_)}

These can be defined at will by those using JWTs\. But to avoid collisions they should be defined in the IANA JSON Web Token Registry
or be defined as a URI that contains a collision resistant namespace\.

```csharp
public static System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> GetPublicClaims(this System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> claims);
```
#### Parameters

###### `claims` [System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1') {#Abblix.Oidc.Server.Common.ClaimsExtensions.GetPublicClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_).claims}

#### Returns
[System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')

## ClaimsExtensions\.GetRegisteredClaims\(this IEnumerable\<Claim\>\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.GetRegisteredClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_)}

These are a set of predefined claims which are not mandatory but recommended, to provide a set of useful, interoperable claims\.
Some of them are:
	iss \(issuer\),
	exp \(expiration time\),
	sub \(subject\),
	aud \(audience\),
and others\.

```csharp
public static System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> GetRegisteredClaims(this System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> claims);
```
#### Parameters

###### `claims` [System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1') {#Abblix.Oidc.Server.Common.ClaimsExtensions.GetRegisteredClaims(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_).claims}

#### Returns
[System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')

## ClaimsExtensions\.GetUserClaimsOnly\(this IEnumerable\<Claim\>\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.GetUserClaimsOnly(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_)}

Returns the user\-facing claim subset: the subject claim plus everything that is not an IANA registered
JWT claim\. Drops protocol metadata \(iss, exp, aud, etc\.\) while preserving identity and profile claims\.

```csharp
public static System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> GetUserClaimsOnly(this System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> claims);
```
#### Parameters

###### `claims` [System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1') {#Abblix.Oidc.Server.Common.ClaimsExtensions.GetUserClaimsOnly(thisSystem.Collections.Generic.IEnumerable_System.Security.Claims.Claim_).claims}

#### Returns
[System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')

## ClaimsExtensions\.IsAuthenticated\(this ClaimsPrincipal\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.IsAuthenticated(thisSystem.Security.Claims.ClaimsPrincipal)}

Determines whether the principal carries an authenticated identity, treating a null principal
or an unauthenticated identity as not authenticated\.

```csharp
public static bool IsAuthenticated(this System.Security.Claims.ClaimsPrincipal principal);
```
#### Parameters

###### `principal` [System\.Security\.Claims\.ClaimsPrincipal](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claimsprincipal 'System\.Security\.Claims\.ClaimsPrincipal') {#Abblix.Oidc.Server.Common.ClaimsExtensions.IsAuthenticated(thisSystem.Security.Claims.ClaimsPrincipal).principal}

The principal to inspect; may be `null`\.

#### Returns
[System\.Boolean](https://learn.microsoft.com/en-us/dotnet/api/system.boolean 'System\.Boolean')  
`true` when the principal has an identity flagged as authenticated\.

## ClaimsExtensions\.SetClaim\(this ICollection\<Claim\>, string, string\) Method {#Abblix.Oidc.Server.Common.ClaimsExtensions.SetClaim(thisSystem.Collections.Generic.ICollection_System.Security.Claims.Claim_,string,string)}

Inserts, updates, or removes a claim by name in the given collection so that exactly one claim with that type
remains, holding the supplied value\. Passing `null` for [value](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.ClaimsExtensions#Abblix.Oidc.Server.Common.ClaimsExtensions.SetClaim(thisSystem.Collections.Generic.ICollection_System.Security.Claims.Claim_,string,string).value 'Abblix\.Oidc\.Server\.Common\.ClaimsExtensions\.SetClaim\(this System\.Collections\.Generic\.ICollection\<System\.Security\.Claims\.Claim\>, string, string\)\.value') deletes the claim\.
When the existing value already equals [value](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.ClaimsExtensions#Abblix.Oidc.Server.Common.ClaimsExtensions.SetClaim(thisSystem.Collections.Generic.ICollection_System.Security.Claims.Claim_,string,string).value 'Abblix\.Oidc\.Server\.Common\.ClaimsExtensions\.SetClaim\(this System\.Collections\.Generic\.ICollection\<System\.Security\.Claims\.Claim\>, string, string\)\.value'), the collection is left untouched\.

```csharp
public static void SetClaim(this System.Collections.Generic.ICollection<System.Security.Claims.Claim> claims, string name, string? value);
```
#### Parameters

###### `claims` [System\.Collections\.Generic\.ICollection&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.icollection-1 'System\.Collections\.Generic\.ICollection\`1')[System\.Security\.Claims\.Claim](https://learn.microsoft.com/en-us/dotnet/api/system.security.claims.claim 'System\.Security\.Claims\.Claim')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.icollection-1 'System\.Collections\.Generic\.ICollection\`1') {#Abblix.Oidc.Server.Common.ClaimsExtensions.SetClaim(thisSystem.Collections.Generic.ICollection_System.Security.Claims.Claim_,string,string).claims}

The mutable claim collection to update in place\.

###### `name` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Oidc.Server.Common.ClaimsExtensions.SetClaim(thisSystem.Collections.Generic.ICollection_System.Security.Claims.Claim_,string,string).name}

The claim type to set or remove\.

###### `value` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Oidc.Server.Common.ClaimsExtensions.SetClaim(thisSystem.Collections.Generic.ICollection_System.Security.Claims.Claim_,string,string).value}

The new value, or `null` to remove any existing claim of that name\.
