在GO中构建JWT身份验证:中间件和辅助软件包的指南
#初学者 #编程 #github #go

在这个项目中,我们深入研究了任何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

上获得