Skip to content

MP Core 0.9.2

Choose a tag to compare

@panahister panahister released this 28 Sep 09:32

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