ContriveAtlas
neostory-schema-set/22snapshot a59c206cec9d
Open Observatory

Core flows · Identity and authority

One human identity, deployment-scoped credentials and isolated data

The hosted identity provider proves who a person is. Each gateway then issues its own revocable device credential and resolves that identity to a stable NeoStory principal without sharing graph or blob storage across deployments.

Product · Engineering · Operations
DeclaredImplementedObservedPlanned
neostory-schema-set/22snapshot a59c206cec9d

Core flows · Identity and authority

One human identity, deployment-scoped credentials and isolated data

The hosted identity provider proves who a person is. Each gateway then issues its own revocable device credential and resolves that identity to a stable NeoStory principal without sharing graph or blob storage across deployments.

Product · Engineering · Operations10 nodes · 10 directed relationships

What this view establishes

The architectural commitments

  1. The identity provider proves identity; it does not receive NeoStory graph or blob data.
  2. Native apps hold gateway credentials, not identity-provider secrets or database credentials.
  3. The web signs in through the same device leg a phone uses, with an https return address instead of a custom scheme; the credential lives in an encrypted HttpOnly cookie and every portal proxy reads as that person, falling back to the portal's own bearer only when nobody is signed in.
  4. Signed in is not let in: under the approval policy the gateway refuses a person nobody approved on every route but the sign-in surface, service credentials are never gated, and admins hold a per-deployment role — so a public web can stay hidden until each account is let in.
  5. Every app hosts the same sign-in surface from the package; an app's own part is its bundle configuration, its wording and two callbacks.

Trust-lane sequence

03

Identity

personobserved

Person

Chooses Google or another configured connection

providerobserved

OIDC provider

Hosted login and signed identity token

subjectimplemented

Issuer + subject

Stable external identity evidence

03

Resolution and credentials

device-flowobserved

Device sign-in

Browser approval completes a short-code exchange

principalimplemented

Principal resolution

Linked history wins; otherwise derive from issuer and subject

tokenimplemented

Gateway credential

Deployment-scoped, expiring, renewable and revocable

02

Environment clients

apple-clientimplemented

Apple apps

Shared sign-in surface; one Keychain group credential

web-clientimplemented

Web session

The same device credential, sealed in an HttpOnly cookie; proxies read as the person

02

Scoped authorities

graph-dataimplemented

Graph authority

Rows authorized for the resolved principal

blob-dataimplemented

Blob authority

Object access mediated by the gateway

Identity and credential sequence

IdentityResolution and credentialsEnvironment clientsScoped authoritiesPerson to OIDC provider: signs in. observed.Person → OIDC provider01 · signs inobservedOIDC provider to Device sign-in: callback. observed.OIDC providerDevice sign-in02 · callbackobservedIssuer + subject to Principal resolution: maps. implemented.Issuer + subjectPrincipal resolution03 · mapsimplementedDevice sign-in to Gateway credential: issues. implemented.Device sign-in → Gateway credential04 · issuesimplementedPrincipal resolution to Gateway credential: binds. implemented.Principal resolution → Gateway credential05 · bindsimplementedGateway credential to Apple apps: stores. implemented.Gateway credentialApple apps06 · storesimplementedPrincipal resolution to Web session: same identity model. implemented.Principal resolutionWeb session07 · same identity modelimplementedApple apps to Graph authority: authorized API. implemented.Apple appsGraph authority08 · authorized APIimplementedApple apps to Blob authority: authorized media. implemented.Apple appsBlob authority09 · authorized mediaimplementedWeb session to Graph authority: authorized API and media. implemented.Web sessionGraph authority10 · authorized API and mediaimplemented

Connections and evidence

Open the 10-relationship source key

Numbers set an explanatory reading order. They do not measure runtime timing.

  1. 01

    PersonOIDC provider

    signs in

    observed
  2. 02

    OIDC providerDevice sign-in

    callback

    observed
  3. 03

    Issuer + subjectPrincipal resolution

    maps

    implemented
  4. 04

    Device sign-inGateway credential

    issues

    implemented
  5. 05

    Principal resolutionGateway credential

    binds

    implemented
  6. 06

    Gateway credentialApple apps

    stores

    implemented
  7. 07

    Principal resolutionWeb session

    same identity model

    implemented
  8. 08

    Apple appsGraph authority

    authorized API

    implemented
  9. 09

    Apple appsBlob authority

    authorized media

    implemented
  10. 10

    Web sessionGraph authority

    authorized API and media

    implemented

Connections and evidence

10 directed, source-backed relationships

Numbers set an explanatory reading order. They do not measure runtime timing.

  1. 01

    PersonOIDC provider

    signs in

    observed
  2. 02

    OIDC providerDevice sign-in

    callback

    observed
  3. 03

    Issuer + subjectPrincipal resolution

    maps

    implemented
  4. 04

    Device sign-inGateway credential

    issues

    implemented
  5. 05

    Principal resolutionGateway credential

    binds

    implemented
  6. 06

    Gateway credentialApple apps

    stores

    implemented
  7. 07

    Principal resolutionWeb session

    same identity model

    implemented
  8. 08

    Apple appsGraph authority

    authorized API

    implemented
  9. 09

    Apple appsBlob authority

    authorized media

    implemented
  10. 10

    Web sessionGraph authority

    authorized API and media

    implemented

What this view establishes

The architectural commitments

  1. The identity provider proves identity; it does not receive NeoStory graph or blob data.
  2. Native apps hold gateway credentials, not identity-provider secrets or database credentials.
  3. The web signs in through the same device leg a phone uses, with an https return address instead of a custom scheme; the credential lives in an encrypted HttpOnly cookie and every portal proxy reads as that person, falling back to the portal's own bearer only when nobody is signed in.
  4. Signed in is not let in: under the approval policy the gateway refuses a person nobody approved on every route but the sign-in surface, service credentials are never gated, and admins hold a per-deployment role — so a public web can stay hidden until each account is let in.
  5. Every app hosts the same sign-in surface from the package; an app's own part is its bundle configuration, its wording and two callbacks.
19 repository sources behind this view
  • Explorer/app/api/blob-resources/[id]/content/route.ts
  • Explorer/app/api/library/_authority.ts
  • Explorer/app/api/session/return/route.ts
  • Explorer/app/api/session/sign-in/route.ts
  • Explorer/app/lib/session.server.ts
  • README.md
  • Sources/NeoStoryClient/CredentialStore.swift
  • Sources/NeoStoryClientUI/AuthoritySignInCoordinator.swift
  • Sources/NeoStoryHTTP/HTTPAuthorityTransport.swift
  • Sources/NeoStoryHTTP/HTTPBlobClient.swift
  • docs/access-scopes.md
  • docs/delegation/login-results-2026-09-02.md
  • docs/delegation/sign-in-surface-results-2026-09-03.md
  • docs/delegation/web-session-playback-results-2026-09-08.md
  • docs/deployment.md
  • docs/login-owner-decisions-2026-09-02.md
  • gateway/README.md
  • gateway/src/neostory_gateway/device_sign_in.py
  • gateway/src/neostory_gateway/oidc_login.py