Core.Portal.SignIn 0.3.56
Core.Portal.SignIn
Core.Portal.SignIn contains product-agnostic helpers for broker-backed portal sign-in.
The package calls the Core auth API through Core.Api.Clients.AuthApiClient, validates the returned JWT, enforces configured roles, and returns a cookie-ready ClaimsPrincipal. Product portals still own login pages, branding, antiforgery, redirects, cookie scheme names, SmartScheme routing, and tenant-specific configuration.
Email-first portal flows use ICorePortalAuthDiscoveryService.DiscoverAsync(...) before asking for a password. The service calls POST /api/core/auth/discover with email, app/surface/principal context, and optional tenant hints. Core resolves a tenant from explicit hints, API-key context, a known identity user, or configured SSO email domains, then returns one of:
redirect: start the returnedNextProviderKeythrough/api/core/auth/start.choice: show the returned interactive providers.password: reveal the product-owned password form.needs_tenant_hint: use a direct tenant link or another tenant-safe hint; do not show a tenant picker by default.
Password recovery uses ICorePortalPasswordResetService. The default broker-backed implementation calls the canonical Core JSON auth endpoints:
POST /api/core/auth/password/request-resetPOST /api/core/auth/password/complete-reset
It carries configured tenant context plus optional per-request product code, reset URL base, and return URL. Product portals still own the Razor pages, validation text, reset email copy, and local proof-mode behavior. A portal that is not yet backed by Core identity may register its own ICorePortalPasswordResetService implementation while keeping the same page flow and result contract.
This package must not reference persistence, API controllers, workers, or product repos.
Example
builder.Services.AddCorePortalSignIn(builder.Configuration, options =>
{
options.CoreApiBaseUrl = "https://api.example.com/";
options.TenantApiKey = builder.Configuration["Portal:TenantApiKey"];
options.RequiredRoles.Add(RoleCodes.PlatformSuperuser);
options.CookieAuthenticationScheme = "ProductPortal.Cookies";
});
The product login page or controller calls ICorePortalSignInService.TryCreatePrincipalAsync(...), then performs SignInAsync(...) with its own cookie scheme and redirect flow.
For shared signed-out UI, pair this package with Core.Portal.Chrome auth shell assets. The chrome package owns the Barlow typeface stack, html[data-theme] dark-mode behavior, and standard language selector/preference handoff; this sign-in package stays focused on broker-backed authentication.
No packages depend on Core.Portal.SignIn.
.NET 10.0
- Core.Api.Clients (>= 0.3.56)
- Core.Contracts (>= 0.3.56)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Http (>= 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Options (>= 10.0.0)
- System.IdentityModel.Tokens.Jwt (>= 8.15.0)
| Version | Downloads | Last updated |
|---|---|---|
| 0.3.77 | 22 | 07/20/2026 |
| 0.3.76 | 1 | 07/19/2026 |
| 0.3.75 | 3 | 07/19/2026 |
| 0.3.74 | 1 | 07/19/2026 |
| 0.3.73 | 2 | 07/18/2026 |
| 0.3.72 | 2 | 07/17/2026 |
| 0.3.71 | 2 | 07/17/2026 |
| 0.3.70 | 2 | 07/17/2026 |
| 0.3.69 | 2 | 07/17/2026 |
| 0.3.68 | 2 | 07/17/2026 |
| 0.3.67 | 2 | 07/17/2026 |
| 0.3.66 | 2 | 07/16/2026 |
| 0.3.65 | 2 | 07/16/2026 |
| 0.3.64 | 2 | 07/15/2026 |
| 0.3.63 | 2 | 07/15/2026 |
| 0.3.62 | 2 | 07/15/2026 |
| 0.3.61 | 2 | 07/15/2026 |
| 0.3.60 | 3 | 07/14/2026 |
| 0.3.59 | 3 | 07/14/2026 |
| 0.3.58 | 2 | 07/14/2026 |
| 0.3.57 | 2 | 07/14/2026 |
| 0.3.56 | 2 | 07/14/2026 |
| 0.3.55 | 2 | 07/14/2026 |
| 0.3.50 | 3 | 07/13/2026 |
| 0.3.49 | 1 | 07/13/2026 |
| 0.3.48 | 1 | 07/13/2026 |
| 0.3.27 | 2 | 07/05/2026 |
| 0.3.26 | 3 | 07/05/2026 |
| 0.3.24 | 1 | 07/03/2026 |
| 0.3.23 | 13 | 06/23/2026 |
| 0.3.22 | 2 | 06/22/2026 |
| 0.3.21 | 2 | 06/21/2026 |
| 0.3.20 | 2 | 06/19/2026 |
| 0.3.19 | 2 | 06/19/2026 |
| 0.3.18 | 2 | 06/19/2026 |
| 0.3.17 | 2 | 06/19/2026 |
| 0.3.16 | 1 | 06/19/2026 |
| 0.3.15 | 2 | 06/19/2026 |
| 0.3.14 | 2 | 06/19/2026 |
| 0.3.13 | 1 | 06/19/2026 |
| 0.3.12 | 1 | 06/19/2026 |
| 0.3.11 | 2 | 06/19/2026 |
| 0.3.10 | 2 | 06/19/2026 |
| 0.3.9 | 1 | 06/19/2026 |
| 0.3.8 | 2 | 06/19/2026 |
| 0.3.7 | 2 | 06/19/2026 |
| 0.3.6 | 2 | 06/18/2026 |
| 0.3.5 | 2 | 06/18/2026 |
| 0.3.4 | 5 | 06/10/2026 |
| 0.3.0 | 4 | 06/02/2026 |
| 0.2.0 | 2 | 06/02/2026 |
| 0.1.3-local.1 | 2 | 06/10/2026 |
| 0.1.2 | 3 | 05/31/2026 |
| 0.1.2-local.1 | 2 | 06/10/2026 |
| 0.1.1 | 16 | 05/28/2026 |