【问题标题】:SSO approach for native mobile app with web views?具有 Web 视图的本机移动应用程序的 SSO 方法?
【发布时间】:2017-12-23 23:22:00
【问题描述】:

因此,原生移动应用(Android 和 iOS)的标准 SSO 方法似乎是通过 AppAuth 库的 OAUth2 + OpenID Connect。

这一切都很好——而且实际上似乎接近优雅。

但是,如果同一个应用程序包含需要使用相同 SSO 访问资源的嵌入式 Web 视图组件(在与本机代码相同的 Web 应用程序中的同一服务器上,所有资源都需要身份验证才能访问),该怎么办?

对于初学者,OAuth2 访问令牌(一旦获得)不会自动传播到 Web 应用程序中的超链接请求,对吧?那么,Web 应用程序页面本身是否真的必须使用 JavaScript 重新设计才能进行这种传播?移动应用可以重写请求来解决这个问题,但是:

  1. 至少在 Android 上这仅适用于 GET 请求(对吗?)
  2. 更重要的是,这是假设 Web 应用程序不需要在普通浏览器客户端中运行

OAuth2 不是正确的方法吗?如果是这样,那似乎是一种耻辱——因为 AppAuth 对于本机应用程序方面来说似乎相当不错。它只是将基本的 Web 视图浏览融合到真正把事情搞砸的图片中。

或者是否有一些事实上的标准 JavaScript 库可以与 Angular 等混合使用(然后需要使用 Angular 等)?

【问题讨论】:

    标签: android ios oauth-2.0 single-sign-on appauth


    【解决方案1】:

    这里是 AppAuth 的主要维护者。对于您所描述的内容,尚无标准方法。 IETF 的原生应用程序 BCP 的 OAuth2 朝着正确的方向迈出了一步(并启发了 AppAuth),但没有涵盖如何在应用程序和站点之间同步身份验证状态 - 这留给阅读器。

    如果您主要关心的是用户浏览器中应用与其关联站点之间的身份验证状态是否一致,最好的方法通常是通过 Android 上的自定义选项卡或 iOS 上的 SFSVC / SFAuthenticationSession 将身份验证委托给站点。身份验证将由站点管理,一旦完成,身份验证状态可以通过自定义方案或应用链接/通用链接共享回应用。

    在嵌入式 WebView 方面,情况正好相反 - 从应用程序中播种网站的 webview 透视图,因为 webview 的状态不会保留,而应用程序的状态应该保留。

    我希望有一个更好、更标准化的解决方案来解决这个问题,并且会朝着这个方向努力,但目前定制的、按服务的解决方案都是可行的。

    【讨论】:

    • 好的,所以我或多或少地获得了基本的 OAuth2 本机应用程序解决方案,AppAuth 如何适合等。我可以在我的 Web 视图中看到识别初始 SSO 登录 302(因为它将查看匿名访问、BASIC 身份验证和 OAuth 身份验证站点的混合——在后一种情况下使用各种提供程序,而不仅仅是一个)——并在那时使用 AppAuth 而不是允许 302?但是当从自定义选项卡登录返回时,我只有 OAuth 令牌。然后我应该如何将其应用于我的网络视图导航?我可以劫持所有 WebView GET 来插入 Bearer,但是 POST 呢?
    • 最先进的 SSO 与基本身份验证的简单、健壮和透明的浏览器客户端状态机相去甚远:(1) 在没有合适的授权标头的情况下发出请求,(2)好的,明确的 401 返回包含足够的信息来挑战用户的身份证明,并且 (3) 在获得此类证明后,结果用于重新发出带有合适的 Authorization 标头的请求,并应用于相同上下文的所有后续请求(在 BASIC 的情况下主机和领域)。对于 SSO 挑战 = 网络流量和证明 = 令牌,但为什么要放弃其余部分?
    • 所以,随着我越来越深入地研究这一点,我想知道混合 Web 视图和本机调用的应用程序是否应该让任何 OAuth2 登录在 Web 视图中照常进行,让 JavaScript 通过令牌到本机,而不是持久化令牌。它似乎更接近于让网络视图“成为一个普通的浏览器”加上原生增强,这就是我的重点。
    猜你喜欢
    • 2011-04-22
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多