Repository navigation
MP Core 0.9.2
MP Core 0.9.2
A patch version: additions only. It follows 0.9.1.
Asked for by running the Tiffin sample: a service
that calls another on behalf of a tenant worked for nobody there (finding T-05). ADR-014 has the decision,
in its addendum of 2026-09-28.
Moving from 0.9.1
Nothing to do. Every change is an addition; a host that configures nothing behaves as before, and no
header is believed.
New
| Package | What it adds |
|---|---|
MPCore.Tenancy.Abstractions |
TenantHeader: the header x-tenant-id, and what a tenant name is |
MPCore.Resilience.Http |
The tenant of a call. AddMPCoreTenantPropagation() on a client's builder writes the tenant of the work into x-tenant-id, on REST and on gRPC clients built by the factory. The package now references MPCore.Tenancy.Abstractions |
MPCore.Security.AspNetCore |
TenantClaimOptions.TrustedServiceClients, and AddMPCoreTenancyFromClaim(Action<TenantClaimOptions>). The header is believed only from a service whose client id is listed, never from a user, never over a tenant in the token |
Documented
| Package | What it now says |
|---|---|
MPCore.Security.AspNetCore |
When a caller is a service: a client_id claim, and no user name or a service-account- one. The summary said something else. Keycloak 25 and later write client_id only for a client with the service_account scope |
Verified
| What | Result |
|---|---|
| New tests | 11 in TenantOverServiceCallsTests, 7 in TenantPropagationTests |
| Each guard broken on purpose | the client list, the kind of caller, the order of token and header, the validation of the value, the writing of the header, the caller's own header: each made its tests fail |
| Tiffin against this source, fifteen scenarios on empty databases | 266 checks passed. Payments' audit trail names the city of all 20 payments Ordering opened; with Ordering taken off Payments' list, the next one names none |
| MP Core's tests, 15 assemblies, against PostgreSQL, TimescaleDB and Redis | 478 passed |
The API baseline of 0.9.1, for every package |
accepted: packing compares each package with its 0.9.1 |
| Both template shapes, generated from the packed template and built against the packed packages | service and modular monolith: 0 warnings, 0 errors |
| The Storefront sample's tests, against the packed packages | 262 passed |