在这个项目中,我们深入研究了任何Web应用程序最关键的方面之一:身份验证。但是,我们没有采用更传统的路线,而是探索了GO中JWT身份验证的实现,这是一种使用户进行认证的现代安全方法。
JSON Web令牌(JWT)提供了一种可靠的可扩展方法,用于处理用户身份验证以及当事方之间的信息的安全传输。我们使用“ github.com/golang-jwt/jwt/v4”软件包来处理我们的令牌的创建和验证。
该项目的亮点是使用中间件来处理每个请求的身份验证。这使身份验证逻辑可以与代码的其余部分分开,从而提高了可读性和维护。
此外,我们使用了各种助手软件包来优化我们的应用程序。大猩猩Mux路由器“ github.com/gorilla/mux”提供了灵活而强大的HTTP请求路由。 “ github.com/joho/godotenv”软件包用于管理环境变量,简化了跨不同开发环境的配置。
我们采用了“ github.com/sirupsen/logrus”来处理服务器日志,为记录调试事件,错误和一般信息提供了灵活性。
这个项目是希望了解如何在GO中实现JWT身份验证的开发人员的绝佳参考,并详细了解如何在实践中使用这些概念。此外,它展示了中间件在分离职责和创建清洁,易于维护的代码方面的力量。
JWT Auth Server
这是使用JWT(JSON Web令牌)用于用户身份验证的Golang的简单身份验证服务器。该项目由不同的路线和处理程序组成,用于登录,热情,刷新和登录。
方法
main()
这是服务器的入口点。它设置日志格式,从.env文件加载环境变量,初始化路由器,设置路由并启动服务器。
欢迎(W http.ResponseWriter,r *http.request)
此处理程序负责欢迎用户。它从cookie获取一个令牌,验证令牌的有效性,提取索赔并将欢迎消息返回给用户。
signin(w http.ResponseWriter,r *http.request)
此处理程序负责记录用户。它读取请求主体的凭据,验证这些凭据,创建JWT令牌并将其返回cookie。
刷新(w http.ResponseWriter,r *http.request)
该处理程序负责刷新用户的JWT令牌。它从cookie获取令牌,验证其有效性,创建一个新的令牌并将其返回cookie。
注销(W http.ResponseWriter,r *http.request)
此处理程序负责记录用户。它只是删除了cookie,有效地使用户的JWT令牌无效。
authenticationmiddleware(下一个http.handler)http.handler
此中间件负责验证用户的身份验证。它用于需要身份验证的路线。
安装说明
首先,用git克隆克隆存储库。
然后,在项目的根部,创建一个 .env 文件,用jwt的秘密键,例如:jwt_key = yoursecretkey。
运行命令构建以编译代码。
最后,运行命令 ./ yourfilename 启动服务器。
测试说明
使用邮递员或curl之类的工具向Local -Host提出邮政请求:8080/签名,其中包含用户名和密码的JSON主体。您应该收到带有JWT令牌的cookie。
{
"username": "admin",
"password": "123456"
}
使用您收到的JWT令牌提出 Localhost:8080/Welcome 。您应该收到用户名的欢迎消息。
向 localhost提出帖子请求:8080/刷新带JWT令牌以接收新令牌。
向 localhost提出请求:8080/logout 以使令牌无效。
此应用程序中使用以下软件包:
-
“ net/http” :这是一个提供HTTP客户端和服务器实现的本机GO软件包。
-
“ github.com/golang-jwt/jwt/v4” :此软件包提供了用于用户身份验证的JWTS(JSON Web令牌)的实现。
-
“ github.com/gorilla/mux” :此软件包是功能强大的URL路由器和调度程序。它用于将传入的HTTP请求路由到其相应的处理程序功能。
-
“ github.com/joho/godotenv” :此软件包用于从.env文件读取环境变量,这是开发环境中配置的常见方法。
-
“编码/json” :这是一个本机GO软件包,用于编码和解码JSON。
-
“ OS” 和“ time” :这些是用于操作系统功能和时间操作的本机GO包。
-
“ github.com/sirupsen/logrus” :此软件包是一个灵活的日志记录库。它用于记录调试信息,错误和一般服务器事件。
所有代码均可在 https://github.com/mffonseca/golang-jwt-authentication
上获得