如何从go-swagger中的API处理函数访问JWT声明?

Mak*_*aus 7 jwt swagger openapi go-swagger

我在使用BearerAuthJWT令牌时使用了sw-swagger .连同实际令牌,我收到的声明包括用户名等数据.

如何在api.ItemsCreateItemHandler下面的功能中访问声明?

package restapi

func configureAPI(api *operations.MyAPI) http.Handler {
    api.BearerAuth = func(token string) (interface{}, error) {
        jwtToken := strings.Replace(token, "Bearer ", "", -1)
        // skipped token verification

        claims, _ := parsedToken.Claims.(jwt.MapClaims)
  }

  api.ItemsCreateItemHandler = items.CreateItemHandlerFunc(func(params items.CreateItemParams, principal interface{}) middleware.Responder {
    // FIXME: Here I need to be able to access JWT claims
    if err := createItem(params.Body, claims); err != nil {
            return nil // handle error
        }
        return items.NewCreateItemCreated()
    })
}
Run Code Online (Sandbox Code Playgroud)

Hen*_*ikM -1

JWT 由 3 部分组成,按标点符号分隔 - 令牌本身是 Base64 编码的。

例如,这是来自https://jwt.io/的令牌

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQs SW5C

您需要拆分和解码,您需要的是包含纯 JSON 有效负载的第二部分。

所以在伪代码中它看起来像这样;

json = Base64Decode(split(".", yourData)[1])
Run Code Online (Sandbox Code Playgroud)

您将在https://jwt.io/看到更具体的示例