Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 针对Grails后端的PhoneGap身份验证模式_Javascript_Ajax_Angularjs_Grails_Cordova - Fatal编程技术网

Javascript 针对Grails后端的PhoneGap身份验证模式

Javascript 针对Grails后端的PhoneGap身份验证模式,javascript,ajax,angularjs,grails,cordova,Javascript,Ajax,Angularjs,Grails,Cordova,我正在Grails中开发一个后端服务,它应该同时服务于web应用程序和移动应用程序 前端正在使用AngularJS进行开发,移动应用程序将使用相同的AngularJS代码库与PhoneGap实现原生 现在,我正在寻找一种合适的方法来使用Grails后端实现身份验证,该后端可用于web应用程序和移动应用程序 三个想法: 1) 在LocalStorage中存储用户名和密码,并在每次请求时在后端对用户进行身份验证 2) 使用基于cookie的身份验证(我认为在PhoneGap中启用cookie很棘手

我正在Grails中开发一个后端服务,它应该同时服务于web应用程序和移动应用程序

前端正在使用AngularJS进行开发,移动应用程序将使用相同的AngularJS代码库与PhoneGap实现原生

现在,我正在寻找一种合适的方法来使用Grails后端实现身份验证,该后端可用于web应用程序和移动应用程序

三个想法:

1) 在LocalStorage中存储用户名和密码,并在每次请求时在后端对用户进行身份验证

2) 使用基于cookie的身份验证(我认为在PhoneGap中启用cookie很棘手 从AJAX响应中提取并附加到AJAX请求中)

3) 开发一个自定义协议,为后端中的每个会话生成一个令牌,并将其存储在LocalStorage中。会话令牌将在每个请求中发送到后端

4) 使用私钥/公钥机制(类似于Amazon AWS)对每个请求进行签名。即使在这种情况下,后端也必须为每个请求验证签名的正确性(没有会话概念)

我不太信任LocalStorage,但我没有其他想法,也找不到任何示例(使用其他后端和前端技术的示例也会有帮助)


您可以假设后端将在HTTPS上运行。

我将选择第三个,并添加一些内容:

  • 第一次连接设备时,您可以通过某种方式(用户/密码或其他方式)对用户进行身份验证。然后向设备发送一个持久性令牌,并将其保存到LocalStorage
  • 对于接下来的每个会话,在打开时,客户机将持久性令牌交换为短寿命会话令牌(短寿命的多少取决于上下文) 这与您提供的类似,但降低了中间人攻击和重播攻击的风险


    希望这有帮助

    我会选择第三个,还有一些补充:

  • 第一次连接设备时,您可以通过某种方式(用户/密码或其他方式)对用户进行身份验证。然后向设备发送一个持久性令牌,并将其保存到LocalStorage
  • 对于接下来的每个会话,在打开时,客户机将持久性令牌交换为短寿命会话令牌(短寿命的多少取决于上下文) 这与您提供的类似,但降低了中间人攻击和重播攻击的风险


    希望这有帮助

    4)使用OAuth2,我相信PhoneGapThanks Igor有实现。我不喜欢使用OAuth2,因为OAuth2提供者的实现超出了项目预算。无论如何,即使使用OAuth2,密钥/令牌存储也将依赖于本地存储能力,不是吗?我的其他3个备选方案呢?4)使用OAuth2,我相信PhoneGapThanks Igor有实现。我不喜欢使用OAuth2,因为OAuth2提供者的实现超出了项目预算。无论如何,即使使用OAuth2,密钥/令牌存储也将依赖于本地存储能力,不是吗?我的其他3个选择呢?