Modernizing OAuth interactions in Native Apps for Better Usability and
      Security
    
    
    
    
    Posted by William Denniss, Product
      Manager, Identity and Authentication
      
      The Identity team is constantly striving to help Google users sign-in to
      third-party applications with their Google account in a secure and seamless way,
      and enable users to share select information from their account such as their
      calendar or contact information with other apps, when they wish to do so.
      
      Under the hood these interactions happen via OAuth requests, and over the years
      Google has supported a number of ways for developers to implement OAuth flows
      with us. With improved security and usability in mind, we will soon be ending
      the support for one of these ways. 
In the coming months, we will no longer allow
      OAuth requests to Google in embedded browsers known as “web-views”, such as the
      WebView UI
      element on Android and UIWebView/WKWebView on iOS, and equivalents on Windows
      and OS X.
      
      
      
      Using the device browser for OAuth requests instead of an embedded
      web-view can improve the usability of your apps significantly: users only need
      to sign-in to Google once per device, improving conversion rates of sign-in and
      authorization flows in your app. Modern “in-app browser tab” patterns available
      on some operating systems, such as Chrome Custom Tabs on Android and
      SFSafariViewController on iOS offer further UX improvements for browser-based
      OAuth flows.
      
      In contrast, the outdated method of using embedded browsers for OAuth means a
      user must sign-in to Google each time, instead of using the existing logged-in
      session from the device. The device browser also provides improved security as
      apps are able to inspect and modify content in a web-view, but not content shown
      in the browser.
      
      To help you migrate, we offer libraries and samples that follow modern best
      practices which you can use:
      
      
      demonstrating how to use the
      browser to authenticate Google users in various Windows environments such as
      Universal Windows Platform (UWP), console and desktop apps.
      
      You can also read 
protocol-level
      documentation for our standards-based support of OAuth for Native Apps, and
      an 
IETF best
      current practice draft on this topic.
      
      Versions of Google Sign-In on iOS prior to version 3.0 don’t support the current
      industry best practices of the in-app browser tab, and therefore are also
      deprecated. If you use Google Sign-In, please update to the latest version to
      get all the recent security and usability improvements. For now, this policy
      does not remove our support of WebView on iOS 8, however we may start to display
      notices encouraging users to upgrade their device for better security.
      
      The rollout schedule for the deprecation of web-views for OAuth requests to
      Google is as follows. Starting 
October 20, 2016, we will
      prevent new OAuth clients from using web-views on platforms with a viable
      alternative, and will phase in user-facing notices for existing OAuth clients.
      On 
April 20, 2017, we will start blocking OAuth requests using
      web-views for all OAuth clients on platforms where
      viable alternatives exist.
      
      If you have any questions with the migration, please post to Stack Overflow
      tagged with “
google-oauth”.
      
      
Update
      On November 1, 2016 we added a notification on our iOS consent page alerting developers of
      this deprecation. On March 1, 2017 we posted the same notification on the Android consent page
      and on April 1, we posted the notification for applications retrieving an OAuth token from
      "
https://accounts.google.com/o/oauth2/programmatic_auth".
      Developers can acknowledge the deprecation and remove this notice from the consent page by
      including a URL parameter "suppress_webview_warning=true" in the request.