2014-09-30 132 views
0

我正在使用陶醉来构建我的Web应用程序并尝试写入验证模块。 我完成了注册部分,现在正在写部分签名。 我读了关于The definitive guide to form-based website authentication的安全部分,并将使用此建议。Web应用程序登录系统

我真的不知道的是,如何登录作品。我拍摄的过程是这样的:

  1. 用户写入用户名和密码的HTML表单,并按下登录
  2. 服务器收到请求,控制器会检查,如果用户信息匹配与数据库中的数据。
  3. 如果是,如何继续。

第三点是我住的地方。但我有一些想法,如果是正确的方式,怎么可能工作和不确定。

因此,当登录信息与数据库匹配时,我会在会话对象(hash数据类型)键值对signed_in中设置:true。每当用户向Web应用程序发出请求时,都需要进行身份验证,如果signed_in为true或真,我会查看会话对象。

这是我会做的,但正如我上面提到的,我不知道这是否是正确的方法。

+0

嗯,它[看起来](https://github.com/revel/revel/pull/458)auth没有充分充实在狂欢 – RickyA 2014-09-30 15:29:07

+0

这就是主意。您可能还想在会话中添加标识用户的内容。 – twotwotwo 2014-09-30 17:47:19

回答

0

是的,像@twotwotwo提到的,给它的用户ID和角色。

所以服务器侧渲染流程:步骤1

  • 用户发送用户名(或其它标识符)和密钥。使用scrypt或bcrypt秘密
  • 在数据库
  • 是否匹配你创建一个结构或地图
  • 连载结构或映射到字符串(JSON,msgpack,采空区)
  • 与存储的盐渍哈希检查
  • 用AES https://github.com/gomango/utility/blob/master/crypto.go(例如)加密字符串。设置全局AES密钥。
  • 创建一个唯一的cookie(或会话)标识符(密钥)
  • 商店标识符和原始结构或地图数据库
  • 发送加密的cookie出(ID = encrypted_struct_or_map又名加密的字符串)

在受保护的资源(或页面):步骤从饼干,如果ID在DB存在

  • 检查2

    • 读取识别符使用AES密钥
    • 解码cookie值比较来自cookie的值与存储的值
    • 如果user.role == “allowed_to_access_this_resource” 渲染
    • 否则http.ResponseWriter。WriteHeader(403)或重定向到登录页面

    现在,如果你想你也可以有一个应用程序范围内的RSA密钥和加密cookie值标志的RSA私钥(步骤1)将字符串之前。在步骤2中用AES密钥解码,检查签名是否有效,然后将内容与db存储的内容进行比较。

    任何更改都必须更新cookie值(结构/映射)和数据库中的信息。