我正在尝试在Flutter中实现OAuth 1.0。 OAuth 1.0的工作方式如下: 我的应用程序请求一个请求令牌,该令牌由我要验证的服务提供。然后,用户被重定向到属于该服务的页面,在该页面中,该用户被授予访问我的应用程序数据的授权。现在,我可以请求访问令牌,该令牌将用于对以后的每个数据请求进行签名。
我正在使用this OAuth plugin进行OAuth过程,并使用Url Launcher plugin来执行请求,因为第一个插件会等待Pin数据,而我希望用户享受完全自动化的过程。 我可以通过OAuth库请求请求令牌,但是以下代码仅启动url,因此我无法从响应中检索数据。
if (await canLaunch(url)) {
await launch(url, forceWebView: true, enableJavaScript: true);
} else {
throw 'Could not launch $url';
}
用户交互后如何获取数据?
答案 0 :(得分:3)
您可以查看flutter_web_auth。我将它用于UnSplash的OAuth登录。
final url = Uri.https('unsplash.com', 'oauth/authorize', {
'response_type': 'code',
'client_id': client_id,
'redirect_uri': redirect_uri,
'scope': scode,
});
final result = await FlutterWebAuth.authenticate(
url: url
.toString()
.replaceAll("%2B", "+"),
callbackUrlScheme: "foobar");
您需要用+替换'%2B',因为url生成器用%2B替换了+符号。
final code = Uri.parse(result).queryParameters['code'];
您将获得将其传递到发布请求以获取令牌的代码。
当然,还有其他OAuth提供程序可用于抖动,但是我已经在我的一个应用程序中使用了它,并对其进行了测试。
答案 1 :(得分:0)
我接受pradyot1996的回答,但我给出了一些解释。
上面给出的提示使我更深入了OAuth 1.0a和plugin。我缺少的步骤是我可以添加一个重定向uri,然后将其替换显示身份验证代码的网页。这是获取服务器返回的验证者代码的最佳方法。
此外,this plugin(可能与pradyot1996建议的一样)允许在应用程序内部打开网页,而无需要求系统打开浏览器并启动服务器来收听答案。如here所述,尽管这是一种不好的做法,但我在应用中向用户通知了此选项。也许我会添加两个选项,以使内容更加清晰。