我正在 Go 网络服务中试用 JWT(JSON 网络令牌)。这是我到目前为止所做的:package jwtimport( "fmt" "net/http" "github.com/gorilla/mux" "github.com/dgrijalva/jwt-go" "io/ioutil")var privateKey []bytevar publicKey []byte func JSONWebTokensHandler(w http.ResponseWriter, r * http.Request){ // Create the token encodeToken := jwt.New(jwt.SigningMethodHS256) // Set some claims encodeToken.Claims["Latitude"] = "25.000" encodeToken.Claims["Longitude"] = "27.000" // Sign and get the complete encoded token as a string tokenString, err := encodeToken.SignedString(privateKey) decodeToken, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) } return publicKey,nil }) if decodeToken.Valid { fmt.Fprintf(w,"Lat: %s, Lng: %s",decodeToken.Claims["Latitude"],decodeToken.Claims["Longitude"]) } else { fmt.Fprintf(w,"Couldn't handle this token: %s", err) }}func init(){ privateKey,_ = ioutil.ReadFile("demo.rsa") publicKey,_ = ioutil.ReadFile("demo.rsa.pub") r := mux.NewRouter() r.HandleFunc("/jwt",JSONWebTokensHandler).Methods("GET") http.Handle("/", r)}现在,如果我的理解是正确的,可以使用公钥解码使用私钥编码的令牌。这就是我在上面的代码中假设的,但是当我运行代码时出现错误:无法处理此令牌:签名无效如果我使用相同的密钥进行编码和解码,则代码有效。我想知道的是,我的理解或代码有什么问题吗?
- 3 回答
- 0 关注
- 329 浏览
添加回答
举报
0/150
提交
取消