KrakenD社区版如何自动生成JWT并添加至请求头?
KrakenD自动生成后端JWT令牌问题解答
社区版支持情况
社区版的auth/signer组件仅用于验证传入请求的JWT签名,并非用来给后端生成并注入JWT的工具,所以你之前的配置不会生效。
至于Lua脚本方案,社区版默认不包含luajwtjitsi库,无法直接通过Lua生成JWT。要在社区版实现该需求,只能通过自定义Go插件完成:
- 编写Go插件,在请求转发到后端的生命周期钩子中生成JWT
- 将生成的JWT以
Bearer {token}格式添加到Authorization请求头 - 编译插件并配置到KrakenD中
简单插件代码框架示例:
package main import ( "github.com/devopsfaith/krakend/config" "github.com/devopsfaith/krakend/proxy" "github.com/lestrrat-go/jwx/v2/jwt" "net/http" "time" ) func NewBackendJWTSigner(next proxy.Proxy) proxy.Proxy { return proxy.ProxyFunc(func(req *http.Request, ctx proxy.Context) (*http.Response, error) { // 生成JWT token, err := jwt.NewBuilder(). Issuer("your-client-id"). IssuedAt(time.Now()). Claim("client_id", "your-client-id"). Claim("user_id", "your-user-id"). Sign(jwt.WithHS256([]byte("your-secret"))) if err != nil { return nil, err } // 添加Authorization头 req.Header.Set("Authorization", "Bearer "+string(token)) // 继续转发请求 return next.ServeHTTP(req, ctx) }) } func RegisterHandlers(cfg config.ServiceConfig, p proxy.Proxy) proxy.Proxy { return NewBackendJWTSigner(p) }
企业版支持情况
KrakenD企业版提供了Backend JWT Signer功能(对应auth/client配置项),可直接通过配置实现自动为后端请求生成JWT并注入Authorization头,无需开发插件。
示例配置(添加到backend的extra_config中):
"extra_config": { "auth/client": { "alg": "HS256", "signing_key": "<your-secret>", "issuer": "<your-client-id>", "claims": { "client_id": "<your-client-id>", "user_id": "<user-id>", "user_representation": "<user-representation>" }, "header_name": "Authorization", "header_prefix": "Bearer " } }
该配置会自动生成符合要求的JWT并添加到请求头中,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Wubinator
相关产品推荐
相关产品推荐

