Cirreum.Runtime.Identity.EntraExternalId
1.0.4
dotnet add package Cirreum.Runtime.Identity.EntraExternalId --version 1.0.4
NuGet\Install-Package Cirreum.Runtime.Identity.EntraExternalId -Version 1.0.4
<PackageReference Include="Cirreum.Runtime.Identity.EntraExternalId" Version="1.0.4" />
<PackageVersion Include="Cirreum.Runtime.Identity.EntraExternalId" Version="1.0.4" />
<PackageReference Include="Cirreum.Runtime.Identity.EntraExternalId" />
paket add Cirreum.Runtime.Identity.EntraExternalId --version 1.0.4
#r "nuget: Cirreum.Runtime.Identity.EntraExternalId, 1.0.4"
#:package Cirreum.Runtime.Identity.EntraExternalId@1.0.4
#addin nuget:?package=Cirreum.Runtime.Identity.EntraExternalId&version=1.0.4
#tool nuget:?package=Cirreum.Runtime.Identity.EntraExternalId&version=1.0.4
Cirreum Runtime Identity EntraExternalId
Runtime Extensions package for Cirreum Identity EntraExternalId — the app-facing entry point for the Microsoft Entra External ID custom-claims provisioning callback.
Overview
Install this package when your application uses Microsoft Entra External ID (CIAM) with a custom authentication extension (onTokenIssuanceStart) that calls into Cirreum for user provisioning. Install the umbrella Cirreum.Runtime.Identity instead if you need multiple identity provider protocols (e.g. Oidc + Entra External ID).
This package contributes two extension methods:
builder.AddEntraExternalIdIdentity(configure?)— registers the Entra External ID provider and, via the optional callback, app-providedIUserProvisionerimplementations keyed per configured instance.app.MapEntraExternalIdIdentity()— maps the provisioning routes for every enabled Entra External ID instance.
Installation
dotnet add package Cirreum.Runtime.Identity.EntraExternalId
Usage
using Microsoft.Extensions.Hosting;
using Microsoft.AspNetCore.Builder;
var builder = WebApplication.CreateBuilder(args);
builder.AddEntraExternalIdIdentity(p => p
.AddProvisioner<EmployeeProvisioner>("primary"));
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapEntraExternalIdIdentity();
app.Run();
App-provided provisioner class
Derive from the base that matches the instance's onboarding model:
using Cirreum.Identity.Provisioning;
public sealed class EmployeeProvisioner(AppDbContext db)
: InvitationUserProvisionerBase<EmployeeUser> {
protected override Task<EmployeeUser?> FindUserAsync(string externalUserId, CancellationToken ct) =>
db.Users.FirstOrDefaultAsync(u => u.ExternalUserId == externalUserId, ct);
protected override async Task<EmployeeUser?> RedeemInvitationAsync(
string email, string externalUserId, CancellationToken ct) {
// atomically find, validate, and claim the invitation; create user record
}
}
See Cirreum.IdentityProvider for the full provisioner hierarchy (UserProvisionerBase<TUser>, InvitationUserProvisionerBase<TUser>, SelfServiceUserProvisionerBase<TUser>) and Cirreum.Identity.EntraExternalId for the Entra External ID wire contract, configuration keys, Azure Portal setup, and security model.
Configuration
{
"Cirreum": {
"Identity": {
"Providers": {
"EntraExternalId": {
"Instances": {
"primary": {
"Enabled": true,
"Route": "/auth/entra/provision",
"ClientId": "<app-registration-client-id>",
"Issuer": "https://<tenant-id>.ciamlogin.com/<tenant-id>/v2.0",
"MetadataEndpoint": "https://<tenant-id>.ciamlogin.com/<tenant-id>/v2.0/.well-known/openid-configuration",
"AllowedAppIds": "<allowed-client-app-guid>"
}
}
}
}
}
}
}
Issuer format gotcha: the tenant-ID subdomain form is required — e.g.
https://<tenant-id>.ciamlogin.com/<tenant-id>/v2.0. The domain-name form (e.g.yourtenant.ciamlogin.com) causes silent token-validation failure.
See Cirreum.Identity.EntraExternalId for the full per-instance settings reference and Azure Portal setup guide.
Dependencies
- Cirreum.Runtime.IdentityProvider — the
RegisterIdentityProvider<>helper,IIdentityBuilder, andIdentityProviderMappingtypes - Cirreum.Identity.EntraExternalId — the Entra External ID registrar, handler, token validator, and settings
Multi-protocol apps
If you need both Oidc and Entra External ID, install the umbrella Cirreum.Runtime.Identity instead — it exposes builder.AddIdentity(configure?) / app.MapIdentity() which register both providers and map all their routes.
License
MIT — see LICENSE.
Cirreum Foundation Framework
Layered simplicity for modern .NET
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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. |
-
net10.0
- Cirreum.Identity.EntraExternalId (>= 2.0.7)
- Cirreum.Runtime.IdentityProvider (>= 1.0.5)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Cirreum.Runtime.Identity.EntraExternalId:
| Package | Downloads |
|---|---|
|
Cirreum.Runtime.Identity
Runtime Extensions umbrella package for the Cirreum Identity provider family. Composes Cirreum.Runtime.Identity.Oidc and Cirreum.Runtime.Identity.EntraExternalId, and exposes app-facing AddIdentity() / MapIdentity() extensions that register all providers and map all provisioning routes. |
GitHub repositories
This package is not used by any popular GitHub repositories.