I am trying to pass an extra parameter in the request that I am trying to send to the Go server -
websocket.create_connection("ws://<ip>:port/x/y?token="qwerty")
The Go server implementation is as follows:
func main() { err := config.Parse() if err != nil { glog.Error(err) os.Exit(1) return } flag.Parse() defer glog.Flush() router := mux.NewRouter() http.Handle("/", httpInterceptor(router)) router.Handle("/v1/x", common.ErrorHandler(stats.GetS)).Methods("GET") router.Handle("/v1/x/y", common.ErrorHandler(stats.GetS)).Methods("GET") var listen = fmt.Sprintf("%s:%d", config.Config.Ip, config.Config.Port) err = http.ListenAndServe(listen, nil) if err != nil { glog.Error(err) os.Exit(1) } } func httpInterceptor(router http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { startTime := time.Now() if !auth.Auth(w, req) { http.Error(w, "Failed authentication", 401) return } router.ServeHTTP(w, req) finishTime := time.Now() elapsedTime := finishTime.Sub(startTime) switch req.Method { case "GET": case "POST": } }) }
How do I look and analyze a token on a Go server so that authentication succeeds?
Library function
func ParseFromRequest(req *http.Request, keyFunc Keyfunc) (token *Token, err error) { // Look for an Authorization header if ah := req.Header.Get("Authorization"); ah != "" { // Should be a bearer token if len(ah) > 6 && strings.ToUpper(ah[0:6]) == "BEARER" { return Parse(ah[7:], keyFunc) } } // Look for "access_token" parameter req.ParseMultipartForm(10e6) if tokStr := req.Form.Get("access_token"); tokStr != "" { return Parse(tokStr, keyFunc) } return nil, ErrNoTokenInRequest }
psbits
source share