Golang 搭建 WebSocket 应用 - jwt 认证
package main
import (
"net/http"
"github.com/dgrijalva/jwt-go"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
// 在这里设置跨域请求
return true
},
}
// jwtTokenAuth 是一个中间件,用于验证JWT token
func jwtTokenAuth(h http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// 从请求中获取token
tokenString := r.URL.Query().Get("token")
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
// 这里应该是你的秘钥
return []byte("your_secret_key"), nil
})
if err != nil || !token.Valid {
http.Error(w, "Invalid token", http.StatusUnauthorized)
return
}
h.ServeHTTP(w, r)
}
}
func wsHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
// 处理错误
return
}
defer conn.Close()
// 使用conn进行通信
}
func main() {
http.HandleFunc("/ws", jwtTokenAuth(wsHandler))
http.ListenAndServe(":8080", nil)
}
这个代码示例展示了如何在Go中使用jwt-go库来验证WebSocket连接的JWT token。在实际应用中,你需要替换your_secret_key
为你的实际秘钥,并且在token.Valid
的判断中可能需要根据实际的JWT标准进行额外的验证。
评论已关闭