Subject: [OAUTH-WG] Native Application Text

From: Anthony Nadalin <[email-masked]>
Date: Wed, 29 Jun 2011 01:15:10 +0000

9. Native Applications

A native application is a client which is installed and executes on the end-user's device (i.e. desktop application, native mobile application, etc.).  Native applications may require special consideration related to security, platform capabilities, and overall end-user experience.  The following are examples of how native applications may utilize OAuth:

   o  Initiate an Authorization Request using an external user-agent: The native application can capture the response from the authorization server using a variety of techniques such as the use of the various methods for redirection including a URI identifying a custom URI scheme (registered with the operating system to invoke the native application as handler), manual copy-and-paste, running a local webserver, browser plug-ins, or by providing a redirection URI identifying a server-hosted resource under the native application's control, which in turn makes the response available to the native application.
   o  Initiate an Authorization Request using an embedded user-agent:  The native application obtains the response by directly communicating with the embedded user-agent.  Techniques include monitoring state changes emitted during URL loading, monitoring http headers, accessing the user-agent's cookie jar, etc.

When choosing between launching an external user-agent and an embedded user-agent, native application developers should consider the following:

   o  External user-agents may improve completion rate as the end-user may already have an active session with the authorization server removing the need to re-authenticate, and provide a familiar user-agent user experience and functionality.  The end-user may also rely on extensions or add-ons to assist with authentication (e.g. password managers or 2-factor device reader).
   o  Embedded user-agents may offer an improved end-user flow, as they remove the need to switch context and open new windows.
   o  Embedded user-agents pose a security challenge because end-users are authenticating in an unidentified window without access to the visual protections found on by many of the external user-agents.  Embedded user-agents educate end-user to trust unidentified requests for authentication (making phishing attacks easier to execute).

When choosing between implicit and authorization code grant types, the following should be considered:

   o  Native applications that use the authorization code grant type flow SHOULD do so without using client password credentials, due to the native application's inability to keep those credentials secure.
   o  When using the implicit grant type flow a refresh token is not returned

---

From: "William J. Mills" <[email-masked]>
Date: Tue, 28 Jun 2011 18:36:16 -0700 (PDT)

You text does not mention what will be a common use case, where the native app uses the password grant to fetch a refresh and access token.  Whether or not an app can keep a secret, it's better to have it store the token than the username/password pair.

________________________________
From: Anthony Nadalin <[email-masked]>
To: "OAuth WG ([email-masked])" <[email-masked]>
Sent: Tuesday, June 28, 2011 6:15 PM
Subject: [OAUTH-WG] Native Application Text

9. Native Applications

A native application is a client which is installed and executes on the end-user's device (i.e. desktop application, native mobile application, etc.).  Native applications may require special consideration related to security, platform capabilities, and overall
 end-user experience.  The following are examples of how native applications may utilize OAuth:

   o  Initiate an Authorization Request using an external user-agent: The native application can capture the response from the authorization server using a variety of techniques such as the use of the various methods for redirection including a URI identifying
 a custom URI scheme (registered with the operating system to invoke the native application as handler), manual copy-and-paste, running a local webserver, browser plug-ins, or by providing a redirection URI identifying a server-hosted resource under the native
 application's control, which in turn makes the response available to the native application.
   o  Initiate an Authorization Request using an embedded user-agent:  The native application obtains the response by directly communicating with the embedded user-agent.  Techniques include monitoring state changes emitted during URL loading, monitoring http
 headers, accessing the user-agent's cookie jar, etc.

   o  External user-agents may improve completion rate as the end-user may already have an active session with the authorization server removing the need to re-authenticate, and provide a familiar user-agent user experience and functionality.  The end-user
 may also rely on extensions or add-ons to assist with authentication (e.g. password managers or 2-factor device reader).
   o  Embedded user-agents may offer an improved end-user flow, as they remove the need to switch context and open new windows. 
   o  Embedded user-agents pose a security challenge because end-users are authenticating in an unidentified window without access to the visual protections found on by many of the external user-agents.  Embedded user-agents educate end-user to trust unidentified
 requests for authentication (making phishing attacks easier to execute).

   o  Native applications that use the authorization code grant type flow SHOULD do so without using client password credentials, due to the native application’s inability to keep those credentials secure.
   o  When using the implicit grant type flow a refresh token is not returned  
 
_______________________________________________
OAuth mailing list
[email-masked]
https://www.ietf.org/mailman/listinfo/oauth