12

因此,本机移动应用程序(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 等)?

4

1 回答 1

8

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

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

就嵌入式 WebView 而言,相反的情况适用 - 从应用程序中播种 webview 的网站透视图,因为 webview 的状态不会持续存在,而应用程序的状态应该持续存在。

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

于 2017-07-19T02:00:18.300 回答