【问题标题】:Using Google OAuth 2 on embedded Android-based device在基于 Android 的嵌入式设备上使用 Google OAuth 2
【发布时间】:2017-08-14 08:15:24
【问题描述】:

我们有一个基于 Android 的嵌入式设备应用程序,它使用 WebView,在其中我们使用 Google OAuth 2 登录到应用程序。不幸的是Google will soon block OAuth 2 inside WebView,我们有很多限制:

  • 该设备未安装 Google 服务,因此可能没有'official' way of logging in 可以工作(或者,如果没有 Google 服务,它们中的任何一个都可以工作?)
  • 我们不能只调用Android浏览器进行登录,因为它显示地址栏,这将允许用户上网,我们不允许这样做
  • 我们无法完全控制设备上安装的软件:无法安装 Google 服务、更新 Android 版本、安装 Google Chrome 等...,我们只能更新我们的应用。

有了这些限制,我们还能做什么?

【问题讨论】:

  • 您的应用需要用户授权才能访问自己的资源?如果没有,那么您可能不需要 OAuth。 Oauth 不是身份验证
  • 不幸的是,这些是我们客户的要求,他们有我们必须用于身份验证的谷歌应用帐户。
  • 要清楚,OAuth 不是身份验证。 Google 的身份验证至少需要一个网络浏览器(2FA 需要更多),这是没有办法的。
  • 您是否尝试过将 oauth 流程用于电视和嵌入式设备?看看这里:developers.google.com/identity/protocols/OAuth2ForDevices

标签: android oauth oauth-2.0 google-oauth


【解决方案1】:

您需要使用 OAuth Web 服务来根据您的需要实施解决方案。

参考链接https://developers.google.com/+/web/api/rest/oauth

这是一个使用 OAuth 2 Web 服务登录 Twitter 的示例 github 项目。您可以从它那里获得帮助,以便在您的 Android 应用程序中使用 Google 的 OAuth2 网络服务。

存储库链接:
https://github.com/sathify/tagpulse

Web服务消费画面链接: https://github.com/sathify/tagpulse/blob/master/android/src/tag/pulse/main.java

我希望这会有所帮助。

【讨论】:

  • 这是关于 oauth 1,google 多年不支持它
【解决方案2】:

【讨论】:

  • 这仍然是基于浏览器的 oauth
  • 好的,该应用支持什么Android API版本?
  • 设备没有安装谷歌服务!! - 你认为这将如何完成]
  • developers.google.com/api-client-library/java/… 它使用 AccountManager 请阅读第二个链接,当您拥有 Google 服务时,第一个链接似乎指向 OAuth 2 我已经编辑了答案
  • 您是正确的@Aloy A Sen,所以我已经编辑了答案,在这种情况下,您需要用于 OAuth 2 的 Google 客户端 API 库,该链接具有误导性,但找到了正确的代码
【解决方案3】:

根据您这边的问题,最好从应用程序内打开一个针对登录 Weburl 的 Intent [这不会触发地址栏链接]

参考这个 stackOverflow 页面 how to open "Add a Google Account" activity using intent?

现在您可以使用共享首选项来存储身份验证数据以供进一步登录 [如果应用要求允许的话。]

https://developer.android.com/reference/android/content/SharedPreferences.html

【讨论】:

    【解决方案4】:

    通过浏览器实现:

    1)注册自定义URI方案(How to implement my very own URI scheme on Android),例如app-oauth2://

    2) 在用户浏览器中发出访问请求

    https://accounts.google.com/o/oauth2/v2/auth?
    scope=...
    access_type=offline&
    include_granted_scopes=true&
    state=state_parameter_passthrough_value&
    redirect_uri=http://example.com/oauth2-handler&
    response_type=code&
    client_id=...
    

    3) 如果用户在确认对话框中接受或拒绝请求的权限,它将被重定向到 redirect_uri (http://example.com/oauth2-handler) 并带有一些参数

    4) 在 redirect_uri 处理程序 (http://example.com/oauth2-handler) 一侧,使用参数重定向到自定义 URI 方案:

    • 成功: app-oauth2://?state=state_parameter_passthrough_value&code=...&scope=...#
    • 失败: app-oauth2://?error=access_denied&state=state_parameter_passthrough_value#

    5) 在您的应用中,您可以从选项 4 解析 URI 方案 app-oauth2:// 并接收代码以供将来使用或向用户显示错误。

    【讨论】:

    • 似乎是一个可行的解决方案。有什么想法可以与 Cordova 一起使用吗?
    • 如果 Cordova 支持自定义协议处理和打开用户浏览器的可能性 - 是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多