@@ -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
32163217Native 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
32193220related to security, platform capabilities, and overall end-user
32203221experience.
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+
32223230The authorization endpoint requires interaction between the client
32233231and the resource owner's user agent. The best current practice is to
32243232perform the OAuth authorization request in an external user agent
32253233(typically the browser) rather than an embedded user agent (such as
32263234one implemented with web-views).
32273235
32283236The 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
32313241client as the handler, manual copy-and-paste of the credentials,
32323242running a local web server, installing a user agent extension, or
32333243by providing a redirect URI identifying a server-hosted
@@ -3258,25 +3268,14 @@ clients are confidential web clients will need to add an
32583268understanding of public native app clients and the types of redirect
32593269URIs 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
32733273Secrets 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
32753275user 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
32803279already provided by the `client_id` request parameter.
32813280
32823281Authorization servers that still require a statically included shared
@@ -3286,6 +3285,23 @@ accept the secret as proof of the client's identity. Without
32863285additional 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}})
33613377in the domains they control. When the browser encounters a
33623378claimed 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
34833499to the authorization server by definition, as the app that hosts the
34843500embedded user agent can access the user's full authentication
34853501credentials, 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
34883505In typical web-view-based implementations of embedded user agents,
34893506the 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
35593576TLS). This is acceptable for loopback
35603577interface 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
35633580authorization 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
35663583order 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`
35693586as described in {{loopback-interface-redirection}}.
35703587
35713588
0 commit comments