Avatar ·

如何在Go中正确组织身份验证?(JWT、会话、中间件)

大家好!我是一名Go新手开发者,正在用纯Go(没有使用Gin或Echo等框架)编写我的第一个REST API。我在身份验证问题上卡住了。我读了很多文章,但每篇文章都推荐不同的方法:有人用JWT,有人用基于cookie的会话,还有人通过第三方服务使用OAuth2。我完全困惑了。 我的任务是:制作一个简单的笔记API。用户注册、登录、获取token,然后使用它来访问受保护的endpoint。目前我在handler中草拟了这样一个简单的密码验证代码: ```go func loginHandler(w http.ResponseWriter, r *http.Request) { // ... 解析包含登录名和密码的JSON user, err := findUserByEmail(email) if err != nil || !checkPasswordHash(password, user.Hash) { http.Error(w, "unauthorized", http.StatusUnauthorized) return } // 接下来呢?如何保存身份验证状态? w.Write([]byte("logged in")) } ``` 问题: 1. 目前哪种方法被认为是