Skip to content

CAP-PFM-SEC-006Use and recover a console sign-in

Markdown

CAP-PFM-SEC-006

Use and recover a console sign-in

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleSecurity, Customers and WorkspacesRevision1

Read atservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Authorized users return to their intended console page after sign-in.Session renewal distinguishes an invalid session from a temporary provider failure.Password recovery provides neutral request confirmation and validates the recovery code.
Surfaces
consoleapi
Intent sources
services-platform:docs/security/console-authentication.md#Acceptance checkpoints (2026-10-10 Final acceptance)services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)

Controls

36 controls apply, from the corpus control catalogue.

TC-AVL-001 TC-AVL-005 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-006 TC-CRY-001 TC-CRY-002 TC-CRY-003 TC-CRY-004 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-IAM-001 TC-IAM-002 TC-IAM-004 TC-IAM-005 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-003 TC-PI-005 TC-SEC-001 TC-SEC-002 TC-SEC-003 TC-SEC-004 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
platform.users.change-passwordapirecord
platform.users.manage-passwordsapitenant
platform.users.readapirecord

Business Rules

12 rules, 10 to be proved before approval. A rule's product intent is derived from its origin: 12 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Password sign-in failure uses the same message for known and unknown accounts.
origin: services-platform:docs/security/console-authentication.md#Acceptance checkpoints (2026-10-10 Final acceptance)
no proof recorded yet
policyconsole, servicetest
react-console:e2e/dev/sign-in.dev.spec.ts#refuses a wrong password with one message that does not say whether the account exists
02must prove
Confirmed
Protected console pages require a session and preserve a safe return destination through sign-in; external destinations and sign-in loops are rejected.
origin: services-platform:docs/security/console-authentication.md#Acceptance checkpoints (2026-10-10 Final acceptance)
no proof recorded yet
policyconsoletest
react-console:e2e/dev/session.dev.spec.ts#sends a signed-out visitor to the login screen and back to the page they wanted
03must prove
Confirmed
Access tokens remain in memory rather than persistent browser storage, refresh tokens use script-inaccessible cookies, reload can restore a session and remembered sessions retain the cookie for seven days.
origin: services-platform:docs/security/console-authentication.md#Acceptance checkpoints (2026-10-10 Final acceptance)
no proof recorded yet
invariantconsoletest
react-console:lib/auth/__tests__/session.test.ts#keeps the access token in memory and the refresh token nowhere
04must prove
Confirmed
Refused or tokenless renewal ends the session with a reason, while temporary provider or network failure preserves a still-valid access token.
no proof recorded yet
policyconsoletest
react-console:lib/auth/__tests__/session.test.ts#keeps a session whose token still works when the refresh cannot reach the network (D-17)
05must prove
Confirmed
Sign-out revokes the refresh token and clears session cookies so protected console pages remain inaccessible through direct navigation or browser history.
origin: services-platform:docs/security/console-authentication.md#Acceptance checkpoints (2026-10-10 Final acceptance)
no proof recorded yet
policyconsoletest
react-console:e2e/dev/session.dev.spec.ts#leaves nothing of the console behind, by URL or by the back button
06must prove
Confirmed
Google callback processing requires this browser’s proof key and matching state and validates returned tokens; unsolicited callbacks, mismatches and forged tokens fail, with cancellation distinguished from provider refusal.
origin: services-platform:docs/security/console-authentication.md#Acceptance checkpoints (2026-10-10 Final acceptance)
no proof recorded yet
validationconsoletest
react-console:e2e/controlled/social-callback.controlled.spec.ts#refuses a code whose state is not the one this browser sent
07
Confirmed
Microsoft sign-in is displayed with an explanation that it is currently unavailable.
origin: services-platform:docs/security/console-authentication.md#Acceptance checkpoints (2026-10-10 Final acceptance)
policyconsoletest
react-console:e2e/dev/social-sign-in.dev.spec.ts#says Microsoft is not available yet rather than sending anybody to an error
08must prove
Confirmed
Password recovery gives known and unknown addresses the same request confirmation, accepts a valid code once and requires at least twelve characters including uppercase, lowercase, a digit and a symbol.
origin: services-platform:docs/security/console-authentication.md#Acceptance checkpoints (2026-10-10 Final acceptance)
no proof recorded yet
validationconsole, servicetest
react-console:e2e/dev/password-recovery.dev.spec.ts#confirms a request the same way whether or not the address has an account
09must prove
Confirmed
Self-service password change requires a valid token belonging to the caller with the required scope; another identity, insufficient scope and a social-only account are refused.
no proof recorded yet
permissionapi, servicetest
services-platform:modules/security/tests/e2e/users.e2e.spec.js#refuses a spoofed access token (another Cognito user) as 403, a token without the scope as 400, and an invalid body as 400
10must prove
Confirmed
Administrative recovery requires password-management permission and a person within the caller’s reach; people outside that customer boundary are refused.
no proof recorded yet
permissionapi, servicetest
services-platform:modules/security/tests/e2e/users.e2e.spec.js#requires the manage-passwords permission (Knox enforces it at the gateway) and refuses a user of another customer
11must prove
Confirmed
A fresh current-user lookup rejects missing, invited, suspended or revoked memberships and recognizes reinstatement immediately; this lookup does not prove immediate expiry of cached authorization decisions.
origin: services-platform:docs/security/security-administration.md#14 Acceptance checkpoints (2026-10-11 Final acceptance)
no proof recorded yet
policyservicetest
services-platform:modules/security/tests/integration/services/invitations/resolve-current-user.integration.spec.js#refuses a suspended caller on the request after the suspension, not at the next token
12
Confirmed
Multi-factor sign-in remains optional for staff and other users under the recorded deferral to a later security milestone.
policyservicedocumented

Scenarios

IdGivenWhenThenProvenance
01A console user’s refresh cookie is missing.The user reloads a protected page.The browser returns to sign-in with the session-expiry explanation.test
react-console:e2e/dev/session.dev.spec.ts#ends the session at the login screen, saying why, once the refresh cookie is gone
02A person needs to reset a forgotten password.They request recovery, try an incorrect code and then submit the delivered code with an acceptable password.The incorrect code fails; successful recovery permits sign-in with the new password, and code reuse fails.test
react-console:e2e/dev/password-recovery.dev.spec.ts#accepts the real code, then signs the person in with the password they chose

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.