Ionic/Cordova App中的身份验证

TyM*_*ayn 66 authentication couchdb angularjs angular-ui ionic-framework

首先,我不是专业人士.

在我成为更好的开发人员的过程中,我正在努力了解需要什么,以及如何为Ionic-Framework应用程序创建注册/登录.

大多数单页面应用程序(SPA)在节点服务器上处理身份验证,该服务器也为客户端提供HTML.在我的情况下,手机本身将提供HTML,所以我猜我可能会遇到一些COR问题.

我知道Ionic-Framework使用状态和基于angular-client-side-auth repo我应该在我改变应用程序中的状态时进行身份验证.

我有一个初始的应用程序设置但现在我有点困惑从这里去.

我拥有的工具:

  • Node.JS Server -Thanks DigitalOcean(我应该使用它作为我的数据库的代理吗?)
  • CouchDB服务器(我们来这里是完整堆栈)

我的问题:

  1. 使用混合应用程序时进行身份验证的标准方法是什么?
  2. 我应该使用Node.JS作为数据库的代理吗?
  3. 我应该跳过node.js并直接使用CouchDB服务器进行身份验证吗?(我听说过这个)
  4. 我是怎么回事呢?
  5. 我的潜在障碍是什么?
  6. CORS如何与混合应用程序配合使用?
  7. 我缺少什么?

感谢您帮助我成为更好的开发人员.

Var*_*ath 78

好的,还有很多东西要回答.但简单的回答是保持简单和认证,就像你常规的网络应用程序一样.

在常规网络应用中:

  • 在常规Web应用程序中,您将向服务器发送请求,并使用数据库检查凭据以对用户进行身份验证

在移动应用中:

  • 在移动应用程序中,您将通过ajax请求执行相同的操作(在角度的情况下使用$ http).
  • 在服务器上完成认证之后,将响应发送回应用程序(例如,json/xml),向前端指示认证的结果.

标准方法是什么?

  • 我不确定标准,但这似乎是最简单的方法.标准总是在变化,因为总有更好的方法来做到这一点.因此,只要它完成工作就可以了,稍后再进行改进.

我应该使用Node.JS作为数据库的代理吗?

  • 我没有使用很多nodeJs所以我不知道你的意思.但是,如果它有助于知道 - 我在接收ajax请求的服务器上使用php,使用mysql数据库处理身份验证并将响应返回给移动应用程序.

我是怎么回事呢?

  • 我还没有看到你的初始设置.至于在应用程序中更改状态时进行身份验证,您可以使用localStorage在成功登录后存储用户信息.注销时清除localStorage.因此,您需要做的就是检查localStorage中是否存在该值以确认用户是否已登录.

我的潜在障碍是什么?

  • 我建议你开始制作你的应用程序,你很快就会知道.整体而言,离子+ cordova使事情变得非常简单,并消除了应用程序开发的大部分障碍.

CORS如何与混合应用程序配合使用?

  • Cordova默认允许跨域请求,因此您不会遇到跨域请求的任何问题,因此您可以直接访问服务器进行身份验证.

我缺少什么?

  • IonicFramework只是一个前端HTML5框架.它本身不能使你成为一个移动应用程序.它只会给你一个很好的用户界面.IonicFramework为您提供了一些很好的javascript功能,它使用angular实现.因此,为了充分利用离子,你应该精通angularJs.学习角度是非常值得的,所以去吧.

  • 实际的应用程序由Cordova编译.Cordova将您的常规html/css/javascript文件打包并将其打包到android apk或iphone ipa中,以便它们可以作为本机应用程序安装在相应的操作系统上.

  • Cordova将允许您访问本机手机功能,如相机,画廊,联系人等.

2015年6月3日更新

基于令牌的身份验证:我相信是另一种选择.它是一种更清晰,更安全的处理身份验证的方法,现在很容易获得.

有关更多信息,请查看以下链接:

使用基于令牌的方法有什么好处?

跨域/ CORS: cookie + CORS在不同的域中不能很好地发挥作用.基于令牌的方法允许您对任何域上的任何服务器进行AJAX调用,因为您使用HTTP标头来传输用户信息.无状态(也称为服务器端可伸缩性):不需要保留会话存储,令牌是一个传递所有用户信息的自我连接实体.该州的其他地方居住在客户端的cookie或本地存储中.

CDN:您可以从CDN(例如javascript,HTML,图像等)提供应用的所有资产,而您的服务器端只是API.解耦:您不依赖于特定的身份验证方案.令牌可能在任何地方生成,因此可以从任何地方调用您的API,只需一种方法来验证这些调用.

移动就绪:当您开始使用本机平台(iOS,Android,Windows 8等)时,使用安全API(您必须处理cookie容器)时,cookie并不理想.采用基于令牌的方法可以简化这一过程.CSRF:因为您不依赖于cookie,所以您不需要防止跨站点请求(例如,您的站点无法生成POST请求并重新使用现有的身份验证cookie,因为没有) .

性能:我们在这里没有提出任何硬性的基准测试,但是网络往返(例如,在数据库上查找会话)可能比计算HMACSHA256以验证令牌和解析其内容需要更多的时间.

登录页面不是特殊情况:如果您使用Protractor编写功能测试,则无需处理任何特殊情况进行登录.基于标准:您的API可以接受标准的JSON Web令牌(JWT).这是一个标准,有多个后端库(.NET,Ruby,Java,Python,PHP)和支持其基础架构的公司(例如Firebase,Google,Microsoft).例如,Firebase允许其客户使用任何身份验证机制,只要您生成具有某些预定义属性的JWT,并使用共享密钥签名以调用其API.


Luc*_*cia 45

nathvarun给出了一个非常完整的答案,但我想在我的应用程序中分享我为身份验证所做的步骤.

  1. 通过ajax 发送email+ password到服务器
  2. token在服务器中生成一个并将其发送回应用程序
  3. Store email+ tokeninlocalStorage
  4. 对于我发送给服务器的每一个请求,我发送email+ tokenviaPOST
  5. 在服务器中,我使用该令牌验证该用户的真实性,如果true执行该方法,如果false我向应用程序发送错误(401)
  6. 如果应用程序收到成功,那么没关系,如果收到错误,我会重定向到登录屏幕.

令人高兴的是,当应用程序打开时,你可以得到email+ tokenlocalStorage,发送到服务器,如果令牌是确定该用户重定向到主画面,否则重定向到登录.然后,每当用户清除应用程序的缓存时,他就会被重定向到登录屏幕.