Skip to content

Authentication and identity

Atlas keeps authentication, catalog identity, and authorization as separate layers.

Concept Meaning Lifecycle owner
Principal The Django account that authenticates and owns the Atlas session Authentication Core and operators
External Identity An immutable (provider_id, source_id, subject) link to one Principal Authentication Core and exact operator commands
Actor A Standard Catalog User entity used in ownership and relationships Standard Catalog, ingestion, or Actor provisioning
Group or Team A catalog Group whose effective members can own resources Operators plus configured reconciliation
Membership grant One reason an Actor belongs to a Group: manual, legacy manual, or provider-owned Its recorded source
Staff or superuser Django administration state Operators only
Purge Grant Separately scoped destructive authority Operators only
AccountAccess Principal-level administrative state, including read_only Operators only
Session A bounded Core-managed browser login Authentication Core

A Principal may exist without an Actor and can authenticate, but it cannot satisfy an owner-Group check. An Actor may exist without a Principal when the catalog describes someone who never signs in. Automatic Actor provisioning is an explicit provider policy and does not claim a similar unlinked Actor.

Provider-independent flow

flowchart LR
    Verify[Selected provider verifies credentials or callback] --> Identity[Normalized source-bound identity]
    Identity --> Link[Core resolves External Identity and Principal]
    Link --> Actor[Core resolves or provisions Actor]
    Actor --> Grants[Core reconciles explicit Group mappings]
    Grants --> Session[Core establishes bounded Django session]
    Session --> Policy[PolicyEvaluator checks ordinary Atlas state]

Local, OIDC, Gitea, and custom providers all finish with the same session and CSRF behavior. Only manifest-selected providers can run. The default controls the initial login interaction; it does not change identity or authorization semantics.

An external subject is meaningful only inside its provider and immutable source. OIDC uses the validated issuer, Gitea uses the canonical instance origin, and a directory plugin uses an operator-declared namespace. Username, email, display name, mutable DN, claims, and groups cannot replace that key or silently join accounts.

Profile and administrative state

A provider may update only the non-security profile fields delegated by the manifest. It cannot set active state, staff or superuser flags, Purge Grants, password or recovery data, identity links, or AccountAccess.read_only. Every linked authentication method shares the Principal's current read-only state. A live session sees flag changes on the next authorization check.

Membership grants

An effective Actor-to-Group membership exists while at least one applicable grant supports the pair. Manual and provider grants remain distinct. Exact sync can remove or expire only the authenticating identity's grants; another provider or manual grant continues to authorize the membership. Additive provider grants remain until explicit removal or source/link revocation.

Group names, OIDC claims, directory attributes, roles, and OAuth scopes do not grant Atlas permissions directly. They can supply inputs to an explicit Group mapping. Staff, superuser, and Purge Grant remain operator-managed.

Sessions and upstream state

Sessions record the establishing provider/source/link, authentication time, and revocation generations. Core validates them on every request and enforces a non-sliding absolute lifetime. Atlas logout always invalidates the local session first. It ends the upstream provider session only when that provider declares and completes remote logout.

Atlas v1 synchronizes external eligibility and exact groups at login within finite session and grant bounds. It does not promise immediate upstream deprovisioning. Operators use local block, link revocation, or revoke-all for urgent access removal.

For procedures, see Principal and Actor provisioning, Group membership reconciliation, and Permissions.