Orleans.Lattice.Explorer.Entra
This page documents Orleans.Lattice.Explorer.Entra, which is in progress, in the documentation for Orleans.Lattice 9.9.0 (release line 9.9), built 2026-10-04. It is also published as markdown, with every table and list, at README.md, and llms.txt lists every page.Orleans.Lattice.Explorer.Entra adds an interactive Microsoft Entra ID sign-in
method to the Explorer for hosts that do not use the hosted-web OpenID Connect
cookie flow.
What it does
When the configured State API advertises the entra auth scheme, this provider
runs an MSAL sign-in, acquires a bearer token for the State API audience, and
returns it through the Explorer's IExplorerAuthMethod seam. The token is
refreshed silently before it expires while refresh remains possible.
Use Orleans.Lattice.Explorer.Entra.Web
for the Blazor Server web head. That package uses ASP.NET Core OpenID Connect
and Microsoft.Identity.Web instead of opening the interactive MSAL flow from the
host process.
Behaviour
- The provider registers an
IExplorerAuthMethodfor theentrascheme. The session chrome offers it when the endpoint advertises that scheme. - MSAL is isolated to this package. Hosts that only need Basic auth do not take the dependency.
- All configured values are public OIDC parameters. No client secret is configured by this package.
- Static configuration wins over endpoint advertisements. Advertised values fill in only the fields left unset locally.
- An advertised authority is accepted only when it is an absolute
httpsURL and its host is admitted. With no custom allow-list, the provider accepts the known Entra login hosts. A non-emptyAllowedAuthorityHostslist replaces that set. UseDeviceCodeswitches from an interactive browser flow to device-code flow.
Setup
Register the core auth services, then the Entra provider. Supplying an authority (or tenant id), client id and scope is required unless the endpoint advertises what you omit.
using Microsoft.Extensions.DependencyInjection;
using Orleans.Lattice.Explorer.Core.Authentication;
using Orleans.Lattice.Explorer.Entra;
var services = new ServiceCollection();
services.AddExplorerAuth();
services.AddExplorerEntraAuth(options =>
{
options.Authority = "https://login.microsoftonline.com/<tenant>";
options.ClientId = "<public-client-id>";
options.Scopes.Add("api://<state-api-app-id>/.default");
});
Configuration
ExplorerEntraOptions configures the provider.
| Property | Type | Default | Purpose |
|---|---|---|---|
Authority |
string? |
null |
OIDC authority, for example https://login.microsoftonline.com/<tenant>. When set, it takes precedence over TenantId. |
TenantId |
string? |
null |
Directory tenant id used to compose the authority when Authority is unset. |
ClientId |
string? |
null |
Public client application id registered in Entra. |
Scopes |
IList<string> |
Empty | Scopes requested for the access token. At least one scope is required after configuration and advertisement are combined. |
AllowedAuthorityHosts |
IList<string> |
Empty | Hosts an advertised authority may name. Empty means the built-in Entra host list; non-empty replaces it. |
UseDeviceCode |
bool |
false |
Uses device-code flow instead of an interactive browser redirect. |
DeviceCodeCallback |
Func<string, CancellationToken, Task>? |
null |
Receives the device-code prompt when device-code flow is enabled. The default acquirer writes the prompt to the console. |
API
| Type or member | Kind | Purpose |
|---|---|---|
AddExplorerEntraAuth(this IServiceCollection services, Action<ExplorerEntraOptions>? configure = null) |
Registration extension | Registers options, the MSAL-backed token acquirer, and the scoped Entra auth method. Throws ArgumentNullException when services is null. |
EntraExplorerAuthMethod |
IExplorerAuthMethod |
Handles the entra scheme. It resolves authority, client id and scopes from configuration first, then advertisement, and returns a bearer sign-in with silent renewal bound to the signed-in account. |
IEntraInteractiveTokenAcquirer |
Seam | Acquires the first token interactively and renews silently. |
MsalEntraInteractiveTokenAcquirer |
Default acquirer | MSAL public-client implementation. MSAL owns the in-memory token cache; the Explorer configuration store is not used for tokens. |
EntraTokenRequest |
sealed record |
Authority, client id, scopes, device-code flag, and optional username for silent renewal. |
EntraTokenResult |
readonly record struct |
Access token, expiry and optional username. In memory only. |