单页Web应用程序和身份验证

时间:2014-04-02 07:36:18

标签: php authentication dart angular-dart

这是设置,我想构建一个单页Web应用程序,Dart和Angular dart是我的前端工具。

对于服务器后端,我使用的是PHP,它只是Web应用程序的CDN和用于为此Web应用程序提供数据的REST API。

我需要构建一些登录和身份验证,并且我已经确定了Openid,以便尽可能简单地进行注册和登录。 我花了最后几天梳理网络和这个论坛寻找一个有意义的解决方案,现在我只是更加困惑:)

我可以在客户端和服务器端获得基本的身份验证信息,使用'登录“X”'示例,对用户进行身份验证,我可以在服务器端创建/注册,所有这些都很酷。

我现在的问题是如何在网络应用和服务器之间以最安全有效的方式使用此信息? 以下是我的想法/选项:

  1. 我是否只是在服务器上创建会话,当网络应用程序进行ajax调用数据检查时,他们仍然在回复之前登录?

  2. 对于真正的RESTful api,我理解最好在每次调用时验证,如何从客户端的ajax调用中执行此操作?我是否在登录时将某些内容(即令牌)传递给客户端以发送每次通话,我将如何执行此操作?

  3. 我是否以相反的方式执行此操作并获取auth详细信息客户端并在发送数据之前以某种方式将其传递给服务器端进行验证?

  4. 我主要是桌面开发人员,所以这一点有点压倒性,对于我应该采取哪种方式的任何建议都将非常感激。 一个简单的一步一步的流程描述给我一些方向将是伟大的,谢谢。

    米克。

2 个答案:

答案 0 :(得分:0)

通常在客户端成功通过身份验证后在服务器上创建会话cookie。客户端必须将此会话cookie与每个请求一起发送到服务器 我自己还没有使用过PHP,但我确信有适用于PHP的现成软件包。
安全是棘手的,容易做错,因此你不应该尝试自己烘烤。
在客户端上不应该做任何事情,因为浏览器默认情况下会将cookie发送回服务器,每个请求。

答案 1 :(得分:0)

这可能是一个解决方案(我不是专家,但我正在考虑使用它):

新的哈希密码存储到数据库

用户创建密码,新密码以散列模式存储到数据库(你可以在服务器端使用dart,例如这个包:password_hasher,必须有类似的php包。)

验证登录并创建具有到期时间的会话信息

当用户登录并提供密码时,将给定的密码与存储的密码进行比较(使用以前包中的功能)。如果密码匹配,则创建数据库的新条目或在服务器端创建会话cookie。新条目应具有唯一ID和到期时间(例如30分钟)。 id被发送回客户端。客户端存储id。

验证每个请求并续订到期时间

当客户端发出请求时,它还会将ID发送回服务器。服务器将收到的id验证到数据库中的id条目。如果id匹配,则数据库中id的到期时间将更新为30分钟并回复请求。

用户注销或有很长的无效时间

当用户注销时,带有id的注销请求将发送到服务器,服务器将从数据库中删除id。如果有超过30分钟的非活动时间段,服务器会自动删除会话ID。

未经授权的请求

如果来自客户端的请求没有包含会话ID或者没有从数据库中找到id,则服务器向客户端发送回复请求重定向到登录页面或发送登录页面(取决于如何构建应用程序。)

主要的安全事项是:

  1. 永远不要将密码存储为文本
  2. 不要在每个请求中发送散列密码,但使用与会话相关的ID进行连续传输
  3. 自动使与会话相关的ID失效
  4. 将每个未经授权的请求重定向到公共页面