我正在尝试将 JWT 身份验证插入一个用go-restful编写的非常简单的 go 服务中。
代码非常类似于:
package main
import (
"github.com/emicklei/go-restful"
"log"
"net/http"
)
type User struct {
Id, Name string
}
type UserList struct {
Users []User
}
func getAllUsers(request *restful.Request, response *restful.Response) {
log.Printf("getAllUsers")
response.WriteEntity(UserList{[]User{{"42", "Gandalf"}, {"3.14", "Pi"}}})
}
func NewUserService() *restful.WebService {
ws := new(restful.WebService)
ws.
Path("/users").
Consumes(restful.MIME_XML, restful.MIME_JSON).
Produces(restful.MIME_JSON, restful.MIME_XML)
ws.Route(ws.GET("").To(getAllUsers))
return ws
}
func main() {
restful.Add(NewUserService())
log.Printf("start listening on localhost:8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
restful.Request
包装器在哪里http.Request
。
话虽如此,也许可以使用Auth0 jwt 中间件。
但是作为一个golang新手,我在管道过程中有点迷失。我看到我必须使用Filter
类似的功能
ws.Filter(jwtAuthentication)
在哪里
func jwtAuthentication(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
// Jwt Magic goes here \o
chain.ProcessFilter(req, resp)
}
但我不知道应该如何以及在哪里实例化 JWT 中间件。