【发布时间】:2015-06-15 00:20:23
【问题描述】:
我正在创建一个 Angular 应用程序,但我无法找到正确的方法来确保我的应用程序及其用户的安全。
我已经阅读了许多堆栈讨论,但我相信我缺少对正在发生的事情的一些核心理解,请更正您在下面看到的任何错误。
到目前为止,我有一个 Sinatra 服务器,其中包含许多(目前主要是假设的)资源路由。用户可以使用通过 BCrypt 散列后存储在数据库中的电子邮件地址和密码创建帐户。当用户登录时,通过电子邮件从数据库中检索记录并检查密码以进行身份验证。从这一点开始,我不知道如何进行。
在此之前,我只是设置了一个会话变量,并让服务器检查该变量是否存在,以便正确路由登录的用户。现在我的应用程序(目前)是一个使用 Angular 和 ui-router 来显示不同内容的单个 HTML 页面,因此大多数请求只是返回 JSON 内容。
据我了解,Restful 应用程序通常不应该使用会话,或者更确切地说,服务器应该以相同的方式响应相同的请求,并且没有自己的数据来形成响应。 但是,如果我不在会话变量中存储某些内容,服务器如何知道发出请求的客户端具有正确的权限? 而且会话是否无论如何都没有存储在浏览器中,因此不属于服务器?
我相信根据我所读到的内容,可以创建一个本质上是一个大随机字符串的令牌,将该字符串返回给客户端,并将其存储在带有时间戳的数据库中。然后,客户端在发出请求时提供此令牌,服务器访问数据库以验证它是否存在且有效。但是客户端是否也不必将该字符串存储在 cookie 中?我想 Angular 应用程序可以将令牌存储在一个变量中,该变量在使用 ui-router 时会持续存在,但如果用户使用地址栏导航则不会。
我也不明白 Basic Auth 可能适合也可能不适合这张图片。非常感谢任何帮助,以及指向一些好的资源的指针,我可能会在这些资源中找到对这些概念的更好理解。
【问题讨论】:
标签: angularjs rest security session sinatra