OpenID Connect Native SSO
OpenID Connect Native SSO for Mobile Apps is an OpenID Foundation Implementer's Draft for reusing authentication between native apps from the same vendor on one physical device. It binds a prior ID Token to a device secret and exchanges that pair for tokens issued to another approved app; it does not prove current user presence or authorize the app's next action.
Definition
OpenID Connect Native SSO for Mobile Apps 1.0 profiles the OpenID Connect authorization-code flow and OAuth Token Exchange so that one native app can reuse authentication obtained by another app from the same vendor on the same physical device. The first app receives an ID Token bound to an opaque device_secret; a second, approved app presents that pair to the same authorization server and receives tokens addressed to its own client identifier.
This is narrower than generic single sign-on. It is not cross-vendor federation, a device login standard, proof that the same human is currently present, or a grant of authority for an app or agent to perform a particular action. It is a protocol for carrying an existing authorization-server session across a deliberately bounded mobile app family.
Status and Scope
Draft 07, dated January 16, 2025, became the OpenID Foundation's Second Implementer's Draft on October 17, 2025. At this page's August 12, 2026 review date, the Foundation still listed Native SSO under Implementer's Drafts rather than Final Specifications. An Implementer's Draft is a stable, implementable snapshot with OpenID Foundation intellectual-property protections; it can still change before final publication.
The profile defines device_sso, device_secret, the ds_hash ID Token claim, the actor-token type urn:openid:params:token-type:device-secret, and the discovery flag native_sso_supported. The IANA OAuth Parameters registry reviewed on the same date did not yet show the profile's metadata name or device-secret token type. Implementers should therefore pin the approved ID2 text, test its authorization-code and token-exchange paths together, and not mistake an IANA Considerations section for completed registry publication.
Protocol Flow
- Establish the source session. App A starts a normal OIDC authorization-code flow and requests
openid device_sso. For a public native client, the browser and redirect flow remains governed by RFC 8252 and PKCE. - Issue a bound pair. At the token endpoint, the authorization server returns
device_secrettogether with an ID Token containingds_hashandsid. The draft leaves the secret's construction and the precise hash binding to the authorization server. - Share only inside the intended app family. App A places the ID Token and device secret in operating-system-protected storage that App B, but not arbitrary apps, can read.
- Exchange for App B. App B calls the token endpoint with the RFC 8693 token-exchange grant. The
audienceis the issuing provider's issuer URI; the subject token is App A's ID Token with typeurn:ietf:params:oauth:token-type:id_token; and the actor token is the device secret with the profile's device-secret token type. Ifscopeis sent, it must includeopenid. A public client supplies itsclient_id; a confidential client must authenticate. - Issue destination-client tokens or require interaction. After validation, the server issues an access token for App B and can also issue a refresh token, ID Token, and updated device secret. If policy requires consent or other direct user interaction, the server returns
interaction_requiredand App B starts the ordinary web flow.
Validation and Token Semantics
Before issuing tokens, the authorization server must validate the device secret; verify the ID Token's signature; confirm that ds_hash binds that token to the presented secret; confirm that the sid session is still valid; and reject an expired session with invalid_grant. It should also maintain an explicit allowlist of source and destination client_id pairs and refuse silent scope acquisition where explicit consent is required. Discovery of native_sso_supported: true advertises protocol support; it does not place a client in that allowlist.
The exchange request identifies App B by client_id, but the profile does not standardize proof of a common code signer, hardware-backed app attestation, or current user presence. Those assurances, where required, must come from platform controls, a separate client-authentication mechanism, server policy, or fresh user interaction; a client identifier alone is not proof that an installed binary belongs to the intended app family.
The profile deliberately uses an ID Token outside ordinary relying-party validation: its aud names App A, not the authorization server, and it may be expired when used in the exchange. That exception belongs only to this issuer-controlled exchange and must not weaken normal ID Token validation elsewhere. A copied, correctly bound ID Token and device secret can reproduce the session on another device unless the implementation adds effective device binding.
RFC 8693 treats an exchange as a one-time event and does not, by itself, create automatic revocation linkage between input and output tokens. Native SSO adds an important lifecycle rule: a newly issued refresh token should use the validated session, and all refresh tokens associated with that session must be invalidated when it expires. Deployments still need separate rules for device-secret invalidation, access-token lifetime or revocation, removal of the shared local pair, and logout propagation.
Native-App Security Baseline
Native SSO adds a credential path; it does not replace the modern OAuth baseline. The source authorization flow should use an external user-agent, exact redirect matching except for the permitted loopback-port variation, and PKCE with S256. A client that talks to more than one authorization server also needs an issuer-based or equivalent mix-up defense. Public native apps cannot safely keep a client secret shipped in the app. Under RFC 9700, refresh tokens issued to public clients must be sender-constrained or rotated, and access should be restricted to the minimum scopes and audiences needed.
The shared-storage boundary is platform-specific and is not standardized by the OpenID profile. On Apple platforms, Keychain access groups allow apps delivered by one development team to share selected items through signing entitlements, potentially without another user prompt. On Android, signature-level permissions can restrict inter-app access to apps signed with the same certificate. Those are examples, not proof that every app carrying the same brand should share a session. The operating-system boundary and the authorization server's client-pair policy must agree.
- Limit shared storage to the smallest app set, and protect the pair under the strongest platform availability and backup rules compatible with the use case.
- Bind the device secret to the device instance where practical, rotate it, and invalidate it after account removal, device loss, app-family removal, or suspected extraction.
- Keep ID Tokens, access tokens, refresh tokens, and device secrets out of URLs, analytics, crash reports, support bundles, model prompts, and general application logs.
- Require fresh user authentication or another deliberate approval step for high-risk operations; possession of the shared pair is not evidence of current human presence.
Governance and Privacy
The trust boundary has two independently governed parts: the mobile platform decides which installed apps can read the shared pair, while the authorization server decides which client pairs may exchange it. Maintain named owners and change control for both. New apps, signing-key rotation, developer-team transfers, mergers, and app acquisitions can alter who is inside the family; a compromised sibling app can expand the blast radius to every account whose pair it can read.
Silent sign-in also creates a correlation channel across apps and may surprise users who reasonably treat separate apps as separate contexts. Product policy should identify participating apps, explain that sign-in may be shared, minimize scopes per destination app, offer a normal interactive path, and provide controls to sign out of one app or the whole family. Retention and telemetry rules should treat the device secret, ID Token, sid, client-pair decisions, and derived identifiers as security-sensitive and potentially linkable data.
Incident plans should answer which sessions, refresh-token families, device secrets, local keychain or IPC records, and downstream access tokens are invalidated after device loss or app compromise. OAuth token revocation and OIDC logout specifications are useful components, but none automatically erases every local or downstream artifact created by this profile.
Agent Context
A mail app, calendar app, assistant shell, and customer-service app may all belong to one vendor family. Native SSO can establish that the authorization server still accepts the family's session on this device. It cannot establish that the user intends an assistant to read a mailbox, send a document, purchase an item, or approve a workflow now. Agent identity, user delegation, tool authorization, and action confirmation remain separate controls.
For an agent-enabled app, derive the smallest destination-specific token set, keep credentials outside the model's context and memory, and bind each consequential tool call to its own policy decision and audit record. A successful token exchange is evidence of session continuity, not blanket consent for future autonomous work.
Minimum Evidence Record
Record enough to reconstruct the control decision without copying credentials:
- profile version and status, issuer, source and destination client identifiers, platform, signing identity or team, and shared-storage policy version;
- the initial flow's redirect class, PKCE and issuer checks, requested scopes, and whether a new or existing device secret was used;
- token-exchange parameter types, approved client-pair rule, session-valid result,
ds_hashvalidation result, requested and granted scopes, and anyinteraction_requiredoutcome; - types and lifetimes of tokens issued, device-secret rotation event, session or token-family identifier represented by a salted audit correlation value, and logout or revocation results; and
- for agent activity, a separate record of the tool, resource, user instruction, policy decision, confirmation, and outcome.
Use keyed fingerprints or vault references where correlation is necessary. Do not record raw bearer tokens, refresh tokens, device secrets, full ID Tokens, authorization codes, or PKCE verifiers.
Failure Modes and Controls
- Brand equals trust. A shared logo or publisher name is not a protocol control. Enforce OS signing or entitlement boundaries and a server-side client-pair allowlist.
- Portable credential pair. Copying both bound artifacts can reproduce the session elsewhere. Add device binding, extraction resistance, rotation, short lifetimes, and anomaly response.
- Scope creep. Do not let silent exchange expand consent. Return
interaction_requiredfor new or sensitive scopes and apply least privilege per destination client. - Exceptional ID Token rules escape the profile. Do not accept expired or differently addressed ID Tokens in ordinary OIDC flows merely because Native SSO allows the issuing server to process them here.
- Partial logout. Test account switch, password reset, app removal, device loss, offline refresh, session expiry, and family-wide sign-out across every participating client.
- Agent authority laundering. Do not convert a successful exchange into durable authority for tools. Apply explicit delegation, resource limits, user confirmation, and revocation at the action layer.
Source Discipline
Use the versioned ID2 document for profile requirements, the OpenID Foundation approval notice and specifications index for publication status, and the IANA registry for registration status. Use OIDC Core and the relevant RFCs for the underlying identity, native-app, token-exchange, security, and revocation rules. Platform documentation should support only platform claims; it does not redefine the OpenID protocol.
The ID2 text defines native_sso_supported, but one sentence uses native_sso_support when describing a false value. Treat that as an editorial inconsistency, use the spelling in the profile's definition and IANA Considerations, and test interoperability rather than accepting both silently. Recommendations on app-family review, user notice, agent approval, telemetry, and incident handling on this page are governance guidance, not normative requirements from the draft.
Spiralist Reading
Spiralism reads Native SSO as a bounded ritual of continuity. One app carries a memory of authentication; another asks the issuer to translate that memory into its own credentials. The important record is not that the device was once trusted, but which app crossed the boundary, which scopes followed, which controls remained independent, and when shared trust ended.
Related Pages
- OpenID Connect
- OpenID Connect Session Management
- OpenID Connect Back-Channel Logout
- OpenID Connect RP-Initiated Logout
- OAuth Token Exchange
- OAuth Native Apps
- OAuth Security Best Current Practice
- Proof Key for Code Exchange
- OAuth Token Revocation
- OAuth Attestation-Based Client Authentication
- Confused Deputy Problem
- AI Agent Identity
- AI Audit Trails
Sources
- G.F.F. Fletcher, OpenID Foundation, OpenID Connect Native SSO for Mobile Apps 1.0, Second Implementer's Draft (draft 07), January 16, 2025.
- OpenID Foundation, Second Implementer's Draft of OpenID Connect Native SSO for Mobile Apps Approved, October 17, 2025.
- OpenID Foundation AB/Connect Working Group, Specifications, accessed August 12, 2026.
- Internet Assigned Numbers Authority, OAuth Parameters, accessed August 12, 2026.
- N. Sakimura, J. Bradley, M. Jones, B. de Medeiros, and C. Mortimore, OpenID Foundation, OpenID Connect Core 1.0 incorporating errata set 2, December 15, 2023.
- W. Denniss and J. Bradley, RFC Editor, RFC 8252: OAuth 2.0 for Native Apps, October 2017.
- M. Jones, A. Nadalin, B. Campbell, J. Bradley, and C. Mortimore, RFC Editor, RFC 8693: OAuth 2.0 Token Exchange, January 2020.
- T. Lodderstedt, J. Bradley, A. Labunets, and D. Fett, RFC Editor, RFC 9700: Best Current Practice for OAuth 2.0 Security, January 2025.
- T. Lodderstedt, S. Dronia, and M. Scurtescu, RFC Editor, RFC 7009: OAuth 2.0 Token Revocation, August 2013.
- M. Jones and J. Bradley, OpenID Foundation, OpenID Connect Back-Channel Logout 1.0 incorporating errata set 1, December 15, 2023.
- Apple, Sharing access to keychain items among a collection of apps, accessed August 12, 2026.
- Android Developers, Security checklist, accessed August 12, 2026.