首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在KrakenD中使用自定义Handler (Go插件)时获得401个未经授权的错误

在KrakenD中使用自定义Handler (Go插件)时获得401个未经授权的错误
EN

Stack Overflow用户
提问于 2022-02-08 09:45:38
回答 1查看 266关注 0票数 0

我试图通过使用go lang在KrakneD中添加自定义逻辑来构建http插件。但目前,我正在从KrakenD获得500个内部服务器错误,在后端获得401个未经授权的错误。当我调试更多时,我可以看到承载令牌没有被传递到后端。

KrakenD后端Config:

代码语言:javascript
复制
"backend": [
        {
            "url_pattern":  "My downstream Path",
            "method":  "Http Method",
            "host": [
                 "My Host"
            ],
            "extra_config": {
                "github.com/devopsfaith/krakend/transport/http/client/executor": {
                    "name": "Plugin Register Name"
                },
                "github.com/devopsfaith/krakend-oauth2-clientcredentials": {
                    "endpoint_params": {},
                    "token_url": "My Token URL",
                    "client_id": "My Client ID",
                    "client_secret": "My Client Secret"
                }
            },
            "disable_host_sanitize": false
        }
]

Go Lang插件

代码语言:javascript
复制
func (r registerer) registerClients(ctx context.Context, extra map[string]interface{}) (http.Handler, error) {
    name, ok := extra["name"].(string)
    if !ok {
        return nil, errors.New("wrong config")
    }
    if name != string(r) {
        return nil, fmt.Errorf("unknown register %s", name)
    }

    // return the actual handler wrapping or your custom logic so it can be used as a replacement for the default http client
    return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {

        fmt.Println(req.Header.Get("Authorization")) // Bearer token is coming empty. I am expecting bearer token value here, which was configured in KrakenD

        client := &http.Client{
            Timeout: time.Second * 10,
        }
        resp, err := client.Do(req)
        defer resp.Body.Close()
        body, err := ioutil.ReadAll(resp.Body)
        w.Write(body)
    }), nil
}
EN

回答 1

Stack Overflow用户

发布于 2022-11-10 07:56:49

后端没有看到Bearer,因为krakend默认不会转发这个标头。必须将input_headers字段设置为krakend。检查链接:https://www.krakend.io/docs/endpoints/parameter-forwarding/#headers-forwarding

您的配置必须是:

代码语言:javascript
复制
"input_headers": [
    "Authorization"
],
"backend": [
        {
            "url_pattern":  "My downstream Path",
            "method":  "Http Method",
            "host": [
                 "My Host"
            ],
            "extra_config": {
                "github.com/devopsfaith/krakend/transport/http/client/executor": {
                    "name": "Plugin Register Name"
                },
                "github.com/devopsfaith/krakend-oauth2-clientcredentials": {
                    "endpoint_params": {},
                    "token_url": "My Token URL",
                    "client_id": "My Client ID",
                    "client_secret": "My Client Secret"
                }
            },
            "disable_host_sanitize": false
        }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71031675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档