Skip to content

Commit ce5ad9a

Browse files
authored
Merge pull request #227 from oauth-wg/aaronpk/native-apps
scope native apps language to mobile apps
2 parents 5aef6a8 + 9f62f92 commit ce5ad9a

File tree

1 file changed

+42
-25
lines changed

1 file changed

+42
-25
lines changed

draft-ietf-oauth-v2-1.md

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ informative:
103103
I-D.bradley-oauth-jwt-encoded-state:
104104
I-D.ietf-oauth-browser-based-apps:
105105
I-D.ietf-oauth-rfc7523bis:
106+
I-D.ietf-oauth-attestation-based-client-auth:
106107

107108
OpenID:
108109
title: OpenID Connect Core 1.0 incorporating errata set 2
@@ -3214,20 +3215,29 @@ This defense SHOULD therefore only be used if other options are not available.
32143215
# Native Applications {#native-applications}
32153216

32163217
Native applications are clients installed and executed on the device
3217-
used by the resource owner (i.e., desktop application, native mobile
3218-
application). Native applications require special consideration
3218+
used by the resource owner (i.e., desktop applications or native mobile
3219+
applications). Native applications require special consideration
32193220
related to security, platform capabilities, and overall end-user
32203221
experience.
32213222

3223+
The guidance in this section is primarily in the context of native mobile apps
3224+
as opposed to desktop apps. The native mobile platforms have matured
3225+
more than the desktop platforms in terms of the capabilities provided
3226+
to app developers relevant to the OAuth flows described here. While
3227+
the guidance is primarily focused on mobile apps, much of it generally can
3228+
apply to desktop apps as well.
3229+
32223230
The authorization endpoint requires interaction between the client
32233231
and the resource owner's user agent. The best current practice is to
32243232
perform the OAuth authorization request in an external user agent
32253233
(typically the browser) rather than an embedded user agent (such as
32263234
one implemented with web-views).
32273235

32283236
The native application can capture the
3229-
response from the authorization server using a redirect URI
3230-
with a scheme registered with the operating system to invoke the
3237+
response from the authorization server in several different ways with
3238+
differing security properties of each. For example, using a redirect URI
3239+
with an "app-claimed URL" or custom URL scheme
3240+
registered with the operating system to invoke the
32313241
client as the handler, manual copy-and-paste of the credentials,
32323242
running a local web server, installing a user agent extension, or
32333243
by providing a redirect URI identifying a server-hosted
@@ -3258,25 +3268,14 @@ clients are confidential web clients will need to add an
32583268
understanding of public native app clients and the types of redirect
32593269
URIs they use to support this best practice.
32603270

3261-
## Registration of Native App Clients {#native-app-registration}
3262-
3263-
Except when using a mechanism like Dynamic Client Registration
3264-
{{RFC7591}} to provision per-instance secrets, native apps are
3265-
classified as public clients, as defined in {{client-types}};
3266-
they MUST be registered with the authorization server as
3267-
such. Authorization servers MUST record the client type in the
3268-
client registration details in order to identify and process requests
3269-
accordingly.
3270-
3271-
### Client Authentication of Native Apps
3271+
## Client Authentication of Native Apps
32723272

32733273
Secrets that are statically included as part of an app distributed to
3274-
multiple users should not be treated as confidential secrets, as one
3274+
multiple users are not confidential secrets, as one
32753275
user may inspect their copy and learn the shared secret. For this
3276-
reason, it is NOT
3277-
RECOMMENDED for authorization servers to require client
3278-
authentication of public native apps clients using a shared secret,
3279-
as this serves little value beyond client identification which is
3276+
reason, authorization servers MUST NOT require client
3277+
authentication of native app clients using a shared secret,
3278+
as this serves no value beyond client identification which is
32803279
already provided by the `client_id` request parameter.
32813280

32823281
Authorization servers that still require a statically included shared
@@ -3286,6 +3285,23 @@ accept the secret as proof of the client's identity. Without
32863285
additional measures, such clients are subject to client impersonation
32873286
(see {{native-app-client-impersonation}}).
32883287

3288+
### Registration of Native App Clients {#native-app-registration}
3289+
3290+
Except when using a mechanism like Dynamic Client Registration
3291+
{{RFC7591}} to provision per-instance credentials, native apps are
3292+
classified as public clients, as defined in {{client-types}},
3293+
and MUST be registered with the authorization server as
3294+
such. Authorization servers MUST record the client type in the
3295+
client registration details in order to identify and process requests
3296+
accordingly.
3297+
3298+
### Native App Attestation {#native-app-attestation}
3299+
3300+
The draft specification {{I-D.ietf-oauth-attestation-based-client-auth}}
3301+
defines a mechanism that can be used by a native app to obtain
3302+
a key-bound attestation to authenticate to an authorization server or
3303+
resource server. This can provide a higher level of assurance of
3304+
a mobile app's identity.
32893305

32903306
## Using Inter-App URI Communication for OAuth in Native Apps
32913307

@@ -3356,7 +3372,7 @@ availability and user experience of which varies by platform.
33563372

33573373
### Claimed "https" Scheme URI Redirection
33583374

3359-
Some operating systems allow apps to claim `https` URIs
3375+
Some operating systems, in particular mobile operating systems, allow apps to claim `https` URIs
33603376
(see {{Section 4.2.2 of RFC9110}})
33613377
in the domains they control. When the browser encounters a
33623378
claimed URI, instead of the page being loaded in the browser, the
@@ -3483,7 +3499,8 @@ apps. These embedded user agents are unsafe for use by third parties
34833499
to the authorization server by definition, as the app that hosts the
34843500
embedded user agent can access the user's full authentication
34853501
credentials, not just the OAuth authorization grant that was intended
3486-
for the app.
3502+
for the app. They are also typically sandboxed by the operating system
3503+
and mechanisms such as WebAuthn that rely on the web origin are disabled.
34873504

34883505
In typical web-view-based implementations of embedded user agents,
34893506
the host application can record every keystroke entered in the login
@@ -3559,13 +3576,13 @@ Loopback interface redirect URIs MAY use the `http` scheme (i.e., without
35593576
TLS). This is acceptable for loopback
35603577
interface redirect URIs as the HTTP request never leaves the device.
35613578

3562-
Clients should open the network port only when starting the
3579+
Clients SHOULD open the network port only when starting the
35633580
authorization request and close it once the response is returned.
35643581

3565-
Clients should listen on the loopback network interface only, in
3582+
Clients SHOULD listen on the loopback network interface only, in
35663583
order to avoid interference by other network actors.
35673584

3568-
Clients should use loopback IP literals rather than the string `localhost`
3585+
Clients SHOULD use loopback IP literals rather than the string `localhost`
35693586
as described in {{loopback-interface-redirection}}.
35703587

35713588

0 commit comments

Comments
 (0)