Skip to content
Customer Identity · available nowBuild your first Test integration.Create a Test project
NamoID
All posts
NamoID Blog

OAuth for First-Party Apps: Native Login Without Password Grant

What the OAuth First-Party Apps draft proposes, how app attestation changes native login, and why teams should not revive the password grant.

Native product teams often want a sign-in experience that feels fully integrated into their app. The old shortcut was the OAuth password grant: collect the user’s password in the app and exchange it for tokens. That design is removed from OAuth 2.1 because it puts credentials in the client and makes phishing-resistant authentication, federation, and flexible MFA much harder.

The IETF OAuth working group’s First-Party Apps specification explores a better model. As of October 2026 it is an Internet-Draft, not a finished RFC. It is useful direction for architecture planning, but production support and interoperability should not be assumed.

Why “we own the app” is not enough

A first-party brand relationship does not make every installed copy trustworthy. Mobile packages can be repackaged, desktop binaries can be modified, and secrets embedded in distributed clients can be extracted. OAuth therefore treats native and browser applications as public clients unless they can prove something stronger at runtime.

The password grant tries to solve the UX problem by transferring trust to the app. The user gives the app a reusable credential, the app handles every authentication factor, and the authorization server loses control over much of the ceremony. That is the wrong boundary.

Authorization code with PKCE remains the safe, broadly interoperable baseline. It keeps authentication at the authorization server and lets the app receive an authorization result without handling the password. Our OAuth 2.1 migration guide explains that baseline.

The draft separates app trust from user authentication

The emerging approach uses app attestation to provide evidence about the application instance. Depending on the platform, that evidence may help an authorization server decide that a request came from an expected app build on a genuine or policy-compliant device.

That evidence answers a different question from user authentication:

  • App attestation: what software instance is making this request?
  • User authentication: which person is proving control of the account?
  • Authorization: what may that app and user combination access?

Keeping those decisions separate matters. A valid app instance is not proof that the current user owns an account. A valid user session is not proof that an unmodified official app is making the request.

The authorization server stays in control

The draft’s direction allows a first-party app to request a more native interaction while leaving policy decisions with the authorization server. The server can evaluate attestation, account risk, requested scopes, device state, and the available authentication methods. It can decline the native path and require a browser-based authorization flow.

That fallback is a security property, not a UX failure. It preserves access when attestation is unavailable, when the device does not meet policy, when federation requires a browser, or when the account needs step-up authentication.

Design the app so the browser path remains complete and tested. Do not create accounts that can only be recovered from one attestation provider or one device platform.

This is not a model for third-party clients

First-party treatment depends on a direct relationship among the app publisher, authorization server, and resource owner’s expected service. A third-party client should not gain a privileged credential-handling flow merely because it claims to be trusted.

If you operate a developer platform, keep third-party registration, consent, redirect validation, and scope controls separate. Never let a client self-declare first-party status. The authorization server needs an administrative trust record and verifiable evidence.

Operational questions come before implementation

App attestation adds dependencies that must be designed explicitly:

  1. Which platforms and attestation providers are supported?
  2. How are signing-key rotations and new app releases introduced?
  3. What happens during an attestation-provider outage?
  4. How are rooted devices, emulators, accessibility needs, and enterprise devices handled?
  5. How long is evidence valid, and how is replay prevented?
  6. Which events are logged without collecting unnecessary device data?

False rejection is an authentication risk too. A strict policy can strand legitimate users. Define degraded modes and recovery paths before treating attestation as a hard requirement.

What teams should do now

Do not implement a private interpretation of the draft and label it standards-compliant. Instead:

  • Continue using authorization code with PKCE for production interoperability.
  • Remove password-grant dependencies and keep credentials out of native apps.
  • Isolate attestation verification behind a provider-neutral interface.
  • Track the First-Party Apps and attestation-based client-authentication drafts.
  • Prototype with non-sensitive test accounts and measure fallback behavior.
  • Document the trust decision independently from user authentication and token authorization.

When the drafts stabilize and your identity provider supports them, a separated architecture will be easier to adopt than a password-based native flow.

NamoID currently centers standards-based hosted authorization so the identity service—not the distributed app—handles user authentication. We are following the first-party work for Indian startups that want native UX without restoring unsafe password handling. Join the NamoID Slack community and send your mobile or desktop use case for an early architecture response.

Sources