Javascript Cordova中的Firebase/Phonegap:使用应用程序内的电子邮件/密码登录?

Javascript Cordova中的Firebase/Phonegap:使用应用程序内的电子邮件/密码登录?,javascript,cordova,webview,firebase,firebasesimplelogin,Javascript,Cordova,Webview,Firebase,Firebasesimplelogin,我正在从cordova应用程序运行一个webview,想要验证一个用户,我知道他们有OAuth策略,但我需要使用电子邮件/密码组合 我希望事情保持简单,但最终可能不得不生成一个令牌 打开加载firebase验证流的InApp浏览器 使用以下方法侦听要完成的身份验证流: 再次从webview获取结果并将其插入webview firebase实例 我猜这是不可能的,因为安全问题 我的应用程序正在使用Amazon登录(必需),因此我的备选方案是: webview在AppBrowser中加载外部u

我正在从cordova应用程序运行一个webview,想要验证一个用户,我知道他们有OAuth策略,但我需要使用电子邮件/密码组合

我希望事情保持简单,但最终可能不得不生成一个令牌

  • 打开加载firebase验证流的InApp浏览器
  • 使用以下方法侦听要完成的身份验证流:
  • 再次从webview获取结果并将其插入webview firebase实例
我猜这是不可能的,因为安全问题

我的应用程序正在使用Amazon登录(必需),因此我的备选方案是:

  • webview在AppBrowser中加载外部url
  • 加载amazonauth,然后为Firebase生成一个令牌
  • webview侦听令牌并获取它,然后将其存储在localstorage中
编辑: 在使用用户名/密码登录的firebase文档中,我看到它返回会话的令牌以及
authData
对象中的更多信息:


然后我可以从该对象获取所有信息并将其发送回cordova webview,然后用信息填充Firebase ref吗?

这也是我感兴趣的一个主题,因为我在webview中实现了类似的twitter数字(本机android)+Firebase自定义登录

我认为,按照firebase的建议,您可以使用其他身份验证提供商,然后使用firebase自定义登录

您是否使用android本机代码中的Amazon登录?如果在登录后是这样,则为firebase生成JWT令牌并使用它访问firebase。 如果所有代码都在Html/js应用程序中,那么在确保服务器登录到Amazon后,您可以使用自定义登录并在服务器上生成令牌

Android混合应用程序的问题如下:JWT令牌(用于firebase)应该在安全系统(例如服务器端)上创建,而不是使用Android java代码,混合应用程序的其他选项是执行http请求以生成令牌,但我发现安全性较低,任何人都可以通过查找URL获得令牌,然后我会在android应用程序代码中生成令牌,您可以在发布新版本时更改令牌的安全密钥/种子


总之,我不认为firebase研究了移动混合应用程序的问题

来自Firebase非常有用的支持的一些答案:

第一:

你是对的–任何人都可以请求注册,我们不公开任何保护url的功能,人们可以从该url注册以进行电子邮件/密码验证

我们需要/启用用于OAuth身份验证的源代码白名单,但不需要用于电子邮件/密码身份验证的主要原因是围绕会话

Firebase登录服务器不维护会话(通过cookie或任何其他方法),因此请求登录服务器进行密码验证。每个请求都需要用户凭据(密码)。当恶意方可以利用用户的会话浏览器,即代表用户向浏览器自动发送cookie的页面发出请求时,CSRF通常是一种风险

此外,对于这些纯HTTP请求,我们没有一个很好的方法来实际执行理想的基于源代码的白名单。我们可以使用CORS,但对于不支持JSONP的旧浏览器环境,我们必须使用JSONP。让事情进一步复杂化的是,PhoneGap/Cordova应用程序根本没有“来源”的相同概念,而且从服务器的角度来看,这些调用与任何发出相同标头的HTTP请求的恶意方是无法区分的

然而,OAuth提供者使用cookies进行会话,并且不需要用户为每个身份验证发明。要求如果你已经批准了某个特定的Facebook应用程序,那么下次该应用程序请求你的数据时,你将不会看到任何UI/UX,也不会得到提示——它将是不可见的。当我们使用OAuth时,我们永远不必向Facebook/Twitter/等发送任何用户凭据,因为这些凭据存储在Facebook.com/Twitter.com/等的浏览器cookie中。我们需要保护的是假装是受欢迎、有效的Facebook应用程序的恶意方。并利用这种短路行为,在用户不知情的情况下访问用户数据

我的答复是:

那么,这是如何保证的呢?如果有人可以从 cordova webview(没有特定的url,只有应用程序本身) 那么我就无法确保人们可以从哪个url注册?所以任何网站 可以在他们的配置中使用我们的url“xxx.com”并开始注册 用户

我觉得这不太对

我想我仍然需要有一个外部的网址,是由你白名单 伙计们。这将具有登录表单并进行身份验证

但我的问题是,我能把认证转移回我的cordova应用程序吗? 它在本地存储中的某个地方我可以检查吗?我得做些测试

最后答复:

当然,我们很乐意帮忙。我编写了很多原始的客户机身份验证代码,可以对其中的设计决策和基本原理进行说明。如果你还有其他问题,一定要告诉我

当然,虽然我们不在cookie中存储用户密码,但我们维护Firebase身份验证。本地存储中的令牌。我们的身份验证令牌由您唯一的Firebase secret签名(因此它们不能被欺骗),并且可以包含在您的安全规则中有用的任意用户数据

默认情况下,当使用委派登录(电子邮件+密码)服务时,这些令牌将只包含一个用户id,用于唯一标识您的用户,以便在安全规则中使用。例如,您可以通过令牌(“.write”)中的用户id将所有写入或读取限制为给定路径(例如写入/users/$uid/name)