Authentication Webapplication登录系统

Authentication Webapplication登录系统,authentication,go,Authentication,Go,我正在使用revel构建我的Web应用程序,并尝试编写身份验证模块。 我完成了注册部分,现在开始写注册部分。 我阅读了关于安全的部分,并将使用此建议 我真正不知道的是,登录是如何工作的。我想象这个过程是这样的: 用户将用户名和密码写入html表单,然后按“登录” 服务器接收请求,控制器将检查用户信息是否与数据库中的数据匹配 如果是,如何继续 第三点是我要呆的地方。但我有一些想法,如何可以工作,不确定,如果是正确的方式 所以,当登录信息和数据库匹配时,我将在会话对象(哈希数据类型)中设置已登录的密

我正在使用revel构建我的Web应用程序,并尝试编写身份验证模块。 我完成了注册部分,现在开始写注册部分。 我阅读了关于安全的部分,并将使用此建议

我真正不知道的是,登录是如何工作的。我想象这个过程是这样的:

  • 用户将用户名和密码写入html表单,然后按“登录”
  • 服务器接收请求,控制器将检查用户信息是否与数据库中的数据匹配
  • 如果是,如何继续
  • 第三点是我要呆的地方。但我有一些想法,如何可以工作,不确定,如果是正确的方式

    所以,当登录信息和数据库匹配时,我将在会话对象(哈希数据类型)中设置已登录的密钥-值对:true。每当用户向webapplication发出需要验证的请求时,我都会查看会话对象,无论signed_in是否为true


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

    是的,就像前面提到的@twoo一样,给它一个用户id和一个角色

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

    • 用户发送用户名(或其他标识符)和密码
    • 使用scrypt或bcrypt,根据数据库中存储的salt散列检查机密
    • 如果匹配,则创建结构或映射
    • 将结构或映射序列化为字符串(json、msgpack、gob)
    • 使用AES加密字符串(例如)。设置一个全局AES密钥
    • 创建唯一的cookie(或会话)标识符(密钥)
    • 在数据库中存储标识符和原始结构或映射
    • 发送加密的cookie(id=加密的\u结构\u或\u映射,也称为加密字符串)
    在受保护的资源(或页面)上:步骤2

    • 从cookie中读取标识符
    • 检查数据库中是否存在id
    • 使用AES密钥解码cookie值
    • 将cookie中的值与存储的值进行比较
    • 如果user.role==“允许访问此资源”呈现页面
    • 否则http.ResponseWriter.WriteHeader(403)或重定向到登录页面
    现在,如果需要,您还可以拥有一个应用程序范围的rsa密钥,在加密cookie值之前,使用rsa私钥对字符串进行签名(在步骤1中)。在步骤2中,使用AES密钥解码,检查签名是否有效,然后将内容与db存储的内容进行比较


    在任何更改中,您都必须更新cookie值(struct/map)和数据库中的信息。

    mmm,it auth还没有完全实现这一点。您可能还希望在会话中放置一些标识用户的内容。