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

## SubjectIdentifier Class

A Subject Identifier: a JSON object whose contents identify a subject within some context
\(RFC 9493 Section 3\)\.

```csharp
public abstract class SubjectIdentifier
```

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

Derived  
↳ [AccountSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.AccountSubject 'Abblix\.SecurityEvents\.Subjects\.AccountSubject')  
↳ [AliasesSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.AliasesSubject 'Abblix\.SecurityEvents\.Subjects\.AliasesSubject')  
↳ [ComplexSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.ComplexSubject 'Abblix\.SecurityEvents\.Subjects\.ComplexSubject')  
↳ [DidSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.DidSubject 'Abblix\.SecurityEvents\.Subjects\.DidSubject')  
↳ [EmailSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.EmailSubject 'Abblix\.SecurityEvents\.Subjects\.EmailSubject')  
↳ [IpAddressesSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.IpAddressesSubject 'Abblix\.SecurityEvents\.Subjects\.IpAddressesSubject')  
↳ [IssSubSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.IssSubSubject 'Abblix\.SecurityEvents\.Subjects\.IssSubSubject')  
↳ [JwtIdSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.JwtIdSubject 'Abblix\.SecurityEvents\.Subjects\.JwtIdSubject')  
↳ [OpaqueSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.OpaqueSubject 'Abblix\.SecurityEvents\.Subjects\.OpaqueSubject')  
↳ [PhoneNumberSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.PhoneNumberSubject 'Abblix\.SecurityEvents\.Subjects\.PhoneNumberSubject')  
↳ [SamlAssertionIdSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.SamlAssertionIdSubject 'Abblix\.SecurityEvents\.Subjects\.SamlAssertionIdSubject')  
↳ [UriSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.UriSubject 'Abblix\.SecurityEvents\.Subjects\.UriSubject')

### Remarks

RFC 9493 Section 3 requires that a Subject Identifier "MUST NOT contain any members prohibited
or not described by its Identifier Format and MUST contain all members required by its
Identifier Format". That rule is kept structurally rather than by a validation pass, in two
halves. Each shipped subtype declares exactly the members its format describes and disallows
unmapped members on deserialization, so a document carrying a member its format does not
describe is rejected rather than accepted and then silently dropped by the next write. And
each subtype's constructor rejects a required member that is absent or empty, so the rule
binds a value built in code exactly as it binds one read off the wire.

The type says how a subject is identified, never what the subject is (RFC 9493 Section 3.1):
an [EmailSubject](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.EmailSubject 'Abblix\.SecurityEvents\.Subjects\.EmailSubject') may denote the person controlling the mailbox, the mailbox
itself, or anything else the transmitter and receiver both understand.
### Properties

## SubjectIdentifier\.Format Property {#Abblix.SecurityEvents.Subjects.SubjectIdentifier.Format}

The name of the Identifier Format this Subject Identifier conforms to \(RFC 9493 Section 3\)\.
Values for the formats this library ships are listed in [SubjectFormats](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Subjects.SubjectFormats 'Abblix\.SecurityEvents\.Subjects\.SubjectFormats')\.

```csharp
public string Format { get; }
```

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

### Remarks
The format member has its own normative sentence, distinct from the per\-format member
rules [Abblix\.SecurityEvents\.Subjects\.SubjectIdentifier\.RequirePresent\(System\.String,System\.String,System\.String\)](https://learn.microsoft.com/en-us/dotnet/api/abblix.securityevents.subjects.subjectidentifier.requirepresent#abblix-securityevents-subjects-subjectidentifier-requirepresent(system-string-system-string-system-string) 'Abblix\.SecurityEvents\.Subjects\.SubjectIdentifier\.RequirePresent\(System\.String,System\.String,System\.String\)') speaks for: "A Subject Identifier \.\.\. MUST contain a
'format' member whose value is the name of that Identifier Format" \(RFC 9493 Section 3\)\.
