Flutter应用程序中的Oauth2流

问题描述:

在我正在构建的Flutter应用程序中,我需要根据自定义(非Google/Facebook/Twitter /等)授权服务器对用户进行身份验证。Flutter应用程序中的Oauth2流

为了达到这个目的,用户应该在网页中填写他们的凭证。为此,可以使用WebView-plugin。但是,当用户通过身份验证后重定向页面时,应关闭WebView,并将代码传递给最初称为WebView的(Flutter)函数。

已经做了一些研究已经,我来到翻过以下选项:

  • This blog post使用本地服务器,仍然需要用户手动关闭该窗口,这是不是一个真正的解决方案(在我看来)。
  • This issue完成与任何OAuth提供程序的集成,但未提供有关浏览器内用户身份验证的任何详细信息。
  • This issue与我所描述的完全相同,但在底部提到了WebView插件提供了一种关闭WebView的方法。虽然它确实有close()功能,但我找不到在redirect-URI上触发它并返回验证码的方法。

是否存在一种解决方案,一旦打开redirect-URI就会自动关闭浏览器(并且还会返回验证码)?

在此先感谢!

我还没有尝试过这个,但我的想法是使用FlutterWebviewPlugin将用户发送到像https://www.facebook.com/v2.8/dialog/oauth?client_id={app-id}&redirect_uri=fbAPP_ID://authorize这样的URL。然后为application:openURL:options:(iOS)和onNewIntent(Android)添加本机处理程序,并修改AndroidManifest.xmlInfo.plist以注册该应用程序以接收来自fbAPP_ID方案的URL。您可以使用平台通道将深层链接参数传递回Dart-land,并在Dart侧的webview上调用close()

+0

这就是我们最终做的,但是出于安全原因,我们使用URL启动器在本地浏览器中执行,而不是WebView。例如,AndroidManifest.xml将URL链接到只检查URI数据的Activity,使用频道发送它,然后关闭它自己。谢谢! –

+0

@RickdeVries什么安全原因? AFAIK外部浏览器只是“非官方”客户的最佳实践(即auth和客户端/应用程序不是由同一实体拥有(代码审查))。 – straya