gpt4 book ai didi

go - Bcrypt 认证和 JWT 授权

转载 作者:行者123 更新时间:2023-12-01 22:26:30 25 4
gpt4 key购买 nike

我有一个 GET 处理程序 /login显示一个要求输入用户名和密码的表单。

type Credentials struct {
Username string `json:"username"`
Password string `json:"password"`
}

func login(w http.ResponseWriter, req *http.Request) {
creds := &Credentials{}
creds.Username = req.FormValue("username")
creds.Password = req.FormValue("password")

result := config.Db.QueryRow("SELECT password FROM users WHERE username=$1", creds.Username)

storedCreds := &Credentials{}
err := result.Scan(&storedCreds.Password)
if err != nil {
if err == sql.ErrNoRows {
// No such row. Return to login form
http.Redirect(w, req, "/login", http.StatusSeeOther)
return
}

fmt.Println("internal error")
return
}

err = bcrypt.CompareHashAndPassword([]byte(storedCreds.Password), []byte(creds.Password))
if err != nil {
// wrong password - return to login form
http.Redirect(w, req, "/login", http.StatusSeeOther)
return
}

// username and password match. Redirect to /welcome.
http.Redirect(w, req, "/welcome", http.StatusSeeOther)
}

对于授权,我使用 JWT(JSON Web token ),因此服务器上没有存储任何内容,但必须创建 token 并将其存储在用户计算机上的 cookie 中。我想知道什么时候应该开始创建存储 token 的 cookie?登录成功后?可以吗?
   err = bcrypt.CompareHashAndPassword([]byte(storedCreds.Password), []byte(creds.Password))
if err != nil {
// wrong password - return to login form
http.Redirect(w, req, "/login", http.StatusSeeOther)
return
}


// Should I create the cookie/token here?


// username and password match. Redirect to /welcome.
http.Redirect(w, req, "/welcome", http.StatusSeeOther)
}

我在网上看到的大多数示例都描述了没有身份验证(登录表单)的 JWT 授权过程,所以这就是我问的原因。

最佳答案

JWT 是验证 HTTP 请求的最安全方法之一。在 JWT 流中, token 本身包含数据。服务器解密 token 以仅对用户进行身份验证。没有数据存储在服务器上。

JWT token 包含在 Authorization HTTP header 中,作为不记名身份验证方案的一部分

JWT token 由颁发者(进行身份验证的服务器)进行数字签名,无需再次与服务器对话即可对其进行验证

因此,它需要在成功登录后生成。在您的情况下,在重定向到欢迎页面之前。

关于go - Bcrypt 认证和 JWT 授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59703739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com