因此,原生移动应用(包括 Android 和 iOS)的标准 SSO 方法似乎是通过 AppAuth 库的 OAUth2 + OpenID Connect。
这一切都很好——而且实际上似乎接近于优雅。
但是,如果同一个应用程序包含嵌入式 Web View 组件,这些组件需要使用相同的 SSO 访问资源(在与 native 代码相同的 Web 应用程序的同一服务器上,其中所有资源都需要身份验证才能访问)怎么办?
对于初学者来说,OAuth2 访问 token (一旦获得)不会自动传播到网络应用程序中的超链接请求,对吧?那么,Web 应用程序页面本身真的必须用 JavaScript 重新设计才能进行这种传播吗?移动应用程序可以重写请求来解决这个问题,但是:
- 至少在 Android 上这只适用于 GET 请求(对吧?)
- 更重要的是,这假设网络应用程序不需要在普通浏览器客户端中运行
OAuth2 在这里不是正确的方法吗?如果是这样,那似乎是一种耻辱——因为 AppAuth 对于 native 应用程序方面来说似乎相当不错。它只是将基本的 Web View 浏览混合到图片中,这确实让事情变得一团糟。
或者是否只有一些事实上的标准 JavaScript 库可以与 Angular 等混合使用(然后需要使用 Angular 等)?
最佳答案
这里是 AppAuth 的主要维护者。对于您所描述的内容,尚无标准方法。 IETF 的 OAuth2 for Native Apps BCP 朝着正确的方向迈出了一步(并启发了 AppAuth),但并未涵盖如何在应用程序和站点之间同步身份验证状态 - 这留作练习读者。
如果您主要关心的是应用程序和用户浏览器中的关联站点之间的一致身份验证状态,最好的方法通常是通过 Android 上的自定义选项卡或 iOS 上的 SFSVC/SFAuthenticationSession 将身份验证委托(delegate)给站点。身份验证将由网站管理,一旦完成,身份验证状态可以通过自定义方案或应用程序链接/通用链接共享回应用程序。
在涉及嵌入式 WebView 的情况下,相反的情况适用 - 从应用程序播种 webview 的网站视角,因为 webview 的状态不会持久化,而应用程序的状态应该持久化。
我希望有一个更好、更标准化的解决方案,并将努力实现这一目标,但目前定制的、按服务的解决方案才是实用的。
关于android - 具有 Web View 的 native 移动应用程序的 SSO 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177826/