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.xml
和Info.plist
以注册该应用程序以接收来自fbAPP_ID
方案的URL。您可以使用平台通道将深层链接参数传递回Dart-land,并在Dart侧的webview上调用close()
。
这就是我们最终做的,但是出于安全原因,我们使用URL启动器在本地浏览器中执行,而不是WebView。例如,AndroidManifest.xml将URL链接到只检查URI数据的Activity,使用频道发送它,然后关闭它自己。谢谢! –
@RickdeVries什么安全原因? AFAIK外部浏览器只是“非官方”客户的最佳实践(即auth和客户端/应用程序不是由同一实体拥有(代码审查))。 – straya