Golang REST API - 从经过验证和解码的令牌传递信息

Posted

技术标签:

【中文标题】Golang REST API - 从经过验证和解码的令牌传递信息【英文标题】:Golang REST API - passing information from a verified and decoded token 【发布时间】:2021-12-24 09:17:12 【问题描述】:

我已设置中间件来验证并从 JWT 令牌中提取声明(使用 https://github.com/golang-jwt/jwt)。

我现在的问题是我想以某种方式将该信息传递给路由处理函数,以便它可以检查存储在令牌中的权限。

我很难找到这方面的好资源,但我看到了两个建议,一个是使用 REDIS 来存储经过验证的令牌信息,另一个是使用 http.Request 上下文。

我宁愿不使用 REDIS,所以我假设它真的只给我留下了 Context?尽管我正在努力寻找关于整个上下文的体面资源,以及此类用例的上下文。

另一种选择是让中间件验证令牌,然后在处理程序 funcs 本身中提取 JWT 声明而不再次验证令牌?

任何帮助/链接/建议将不胜感激...我知道在 Go 中有很多方法可以给猫剥皮,但我宁愿遵循最佳实践。

【问题讨论】:

【参考方案1】:

这是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))

【讨论】:

以上是关于Golang REST API - 从经过验证和解码的令牌传递信息的主要内容,如果未能解决你的问题,请参考以下文章

Firestore REST API 使用 http-client 发出经过身份验证的请求

从 Django Rest Framework 将经过身份验证的用户传递给 SendBird

从 Django Rest Framework 中的令牌获取经过身份验证的用户

从经过 SAML 验证的 UI 验证 AJAX API 调用

作为经过身份验证的用户,我可以使用 ArcGIS REST-API“applyEdits”来更新要素层吗?

SPA 使用的经过身份验证的 Rest API:如何获取用于登录和注册表单的 CSRF 令牌?