Sufficit.Identity.Core
1.26.902.357
See the version list below for details.
dotnet add package Sufficit.Identity.Core --version 1.26.902.357
NuGet\Install-Package Sufficit.Identity.Core -Version 1.26.902.357
<PackageReference Include="Sufficit.Identity.Core" Version="1.26.902.357" />
<PackageVersion Include="Sufficit.Identity.Core" Version="1.26.902.357" />
<PackageReference Include="Sufficit.Identity.Core" />
paket add Sufficit.Identity.Core --version 1.26.902.357
#r "nuget: Sufficit.Identity.Core, 1.26.902.357"
#:package Sufficit.Identity.Core@1.26.902.357
#addin nuget:?package=Sufficit.Identity.Core&version=1.26.902.357
#tool nuget:?package=Sufficit.Identity.Core&version=1.26.902.357
Sufficit Identity Core
Shared contracts for authentication and authorization across every Sufficit product. This library is the single place where the vocabulary lives, so that a telephony screen, a finance report and an AI agent all answer the question "may this principal do this?" the same way.
Targets netstandard2.0 through net10.0, which is why it can be referenced
from the .NET Framework 4.8 web application and from the newest services alike.
Why this is public
Security rests on the secrecy of keys, not of design — Kerckhoffs's principle, restated by Shannon as "the enemy knows the system". The OpenID Connect discovery document and the signing keys of the identity service are public by necessity; an integrator, or an attacker, can already read how the protocol works. What this documentation adds is a correct integration, not an attack surface.
The line we hold is not design versus no design. It is how it works (published) versus what we run (not published). Host names, addresses, ports, database names, real tenant identifiers and account identifiers belong to the operational inventory and never appear here. Every identifier in these documents is a deliberately fake example.
Documentation
Start with the concepts; the rest assumes that vocabulary.
| Document | What it answers |
|---|---|
| Concepts | What a scope, a role and an entitlement each decide, and why they are not three levels of the same thing |
| Entitlements | The format, how identity and context are compared, and what makes a value invalid |
| Entitlement catalogue | Every entitlement, grouped by feature |
| Roles | Coarse grouping, hierarchy, and where expansion happens |
| Integration | How a new application connects, step by step |
| Enrichment | Where authorization data comes from, caching, revalidation and revocation |
| Errors | What to do when a decision cannot be made |
| Versioning | How the contract changes without breaking consumers |
| Decisions | Why the design is the way it is |
The shape of an authorization decision
Three questions, three different answers:
- Scope — what the application may ask for. It belongs to the OAuth client, not to the person, which is why it appears on a consent screen.
- Role — a coarse grouping of a person inside a context. Drives navigation: which screens and links exist at all.
- Entitlement — a specific permission inside a specific context. Drives actions: which button is enabled, whether a save is allowed.
Roles keep granting from becoming an endless list. Entitlements keep each product free to define its own vocabulary. The two exist precisely because one compensates for the other.
Reading a decision in code
// May this principal read phone calls in this context?
if (principal.HasEntitlement<PhoneCallsEntitlement>(contextId))
{
// ...
}
The context is always explicit. There is no ambient "current company": a principal may hold different permissions in different contexts at the same time, and a screen that shows several contexts at once is a normal case, not an exception.
Naming. The published vocabulary is entitlement, following RFC 9068 §2.2.3.2 and the SCIM semantics it borrows from (RFC 7643 §4.1.2). The rename is complete in this library. Consumers migrate by taking the new major version when they are ready; see the decision record.
Contributing
Documentation and identifiers are written in English. The team works from several places, and a shared vocabulary is worth more than a familiar one.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.19 && < 10.0.0)
- Microsoft.Extensions.Identity.Stores (>= 9.0.19 && < 10.0.0)
- Microsoft.Extensions.Logging (>= 9.0.19 && < 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.19 && < 10.0.0)
- Microsoft.Extensions.Options (>= 9.0.19 && < 10.0.0)
- Sufficit.Utils (>= 1.26.804.1503)
- System.Text.Json (>= 9.0.19 && < 10.0.0)
-
net10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.11 && < 11.0.0)
- Microsoft.Extensions.Identity.Stores (>= 10.0.11 && < 11.0.0)
- Microsoft.Extensions.Logging (>= 10.0.11 && < 11.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.11 && < 11.0.0)
- Microsoft.Extensions.Options (>= 10.0.11 && < 11.0.0)
- Sufficit.Utils (>= 1.26.804.1503)
-
net7.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0 && < 8.0.0)
- Microsoft.Extensions.Identity.Stores (>= 7.0.20 && < 8.0.0)
- Microsoft.Extensions.Logging (>= 7.0.0 && < 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 7.0.1 && < 8.0.0)
- Microsoft.Extensions.Options (>= 7.0.1 && < 8.0.0)
- Sufficit.Utils (>= 1.26.804.1503)
- System.Text.Json (>= 8.0.5 && < 9.0.0)
-
net9.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.19 && < 10.0.0)
- Microsoft.Extensions.Identity.Stores (>= 9.0.19 && < 10.0.0)
- Microsoft.Extensions.Logging (>= 9.0.19 && < 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.19 && < 10.0.0)
- Microsoft.Extensions.Options (>= 9.0.19 && < 10.0.0)
- Sufficit.Utils (>= 1.26.804.1503)
NuGet packages (6)
Showing the top 5 NuGet packages that depend on Sufficit.Identity.Core:
| Package | Downloads |
|---|---|
|
Sufficit.Blazor
Package Description |
|
|
Sufficit.Client
EndPoints API Client |
|
|
Sufficit.Net.Http
Package Description |
|
|
Sufficit.Telephony.EventsPanel
Package Description |
|
|
Sufficit.Identity.Client
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.26.909.1815 | 29 | 9/9/2026 |
| 1.26.906.1634 | 110 | 9/6/2026 |
| 1.26.903.1853 | 140 | 9/3/2026 |
| 1.26.903.1811 | 82 | 9/3/2026 |
| 1.26.902.1525 | 158 | 9/2/2026 |
| 1.26.902.357 | 80 | 9/2/2026 |
| 1.26.902.351 | 81 | 9/2/2026 |
| 1.26.902.336 | 86 | 9/2/2026 |
| 1.26.818.1412 | 135 | 8/18/2026 |
| 1.26.817.2216 | 120 | 8/17/2026 |
| 1.26.812.139 | 456 | 8/12/2026 |
| 1.26.810.26 | 144 | 8/10/2026 |
| 1.26.809.2352 | 99 | 8/9/2026 |
| 1.26.805.1819 | 347 | 8/5/2026 |
| 1.26.803.2 | 281 | 8/3/2026 |
| 1.26.731.1513 | 141 | 7/31/2026 |
| 1.26.604.1726 | 4,471 | 6/4/2026 |
| 1.26.508.358 | 275 | 5/8/2026 |
| 1.26.508.345 | 122 | 5/8/2026 |
| 1.26.508.336 | 128 | 5/8/2026 |