Golang REST API - 从经过验证和解码的令牌传递信息
Golang REST API - passing information from a verified and decoded token
我已经设置了中间件来验证并从 JWT 令牌中提取声明(使用 https://github.com/golang-jwt/jwt)。
我现在的问题是我想以某种方式将该信息传递给路由处理函数,以便它可以检查存储在令牌中的权限。
我很难找到这方面的好资源,但我看到了两个建议,一个是在验证后使用 REDIS 存储令牌信息,另一个是使用 http.Request 上下文。
我宁愿不使用 REDIS,所以我假设它只给我留下了 Context?尽管我正在努力寻找关于整个上下文的体面资源,以及此类用例的上下文。
另一种选择是让中间件验证令牌,然后在处理函数本身中提取 JWT 声明而不再次验证令牌?
任何 help/links/advice 将不胜感激...我知道有很多方法可以在 Go 中给猫剥皮,但我宁愿遵循最佳实践。
这是 Context
上的一个很好的教程:https://go.dev/blog/context。
早期也有关于上下文和中间件的 SO 讨论,例如How to pass context in golang request to middleware
您可以使用 context.WithValue
将任意键->值映射添加到上下文中,然后请求的 WithValue
方法:
它可以像这样简单:
func middleware(rw http.ResponseWriter, req *http.Request, next http.Handler) {
ctx := context.WithValue(req.Context(), "key", "value")
next.ServeHTTP(rw, req.WithContext(ctx))
}
我已经设置了中间件来验证并从 JWT 令牌中提取声明(使用 https://github.com/golang-jwt/jwt)。
我现在的问题是我想以某种方式将该信息传递给路由处理函数,以便它可以检查存储在令牌中的权限。
我很难找到这方面的好资源,但我看到了两个建议,一个是在验证后使用 REDIS 存储令牌信息,另一个是使用 http.Request 上下文。
我宁愿不使用 REDIS,所以我假设它只给我留下了 Context?尽管我正在努力寻找关于整个上下文的体面资源,以及此类用例的上下文。
另一种选择是让中间件验证令牌,然后在处理函数本身中提取 JWT 声明而不再次验证令牌?
任何 help/links/advice 将不胜感激...我知道有很多方法可以在 Go 中给猫剥皮,但我宁愿遵循最佳实践。
这是 Context
上的一个很好的教程:https://go.dev/blog/context。
早期也有关于上下文和中间件的 SO 讨论,例如How to pass context in golang request to middleware
您可以使用 context.WithValue
将任意键->值映射添加到上下文中,然后请求的 WithValue
方法:
它可以像这样简单:
func middleware(rw http.ResponseWriter, req *http.Request, next http.Handler) {
ctx := context.WithValue(req.Context(), "key", "value")
next.ServeHTTP(rw, req.WithContext(ctx))
}