Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 63.6MB ·虚拟内存 1300.0MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
Golang 通过第三方库支持 JWT。
客户端与服务端通过 JWT 交互,服务端通过解密 token 信息,来实现用户认证。
使用 JWT 不需要服务端集中维护 token 信息,便于扩展。
JWT 也有缺点,我们可以采用变通的手段来解决这些问题:
Golang JWT 第三方库很多,我们推荐使用开源项目 http://github.com/dgrijalva/jwt-go。
Golang 使用 JWT 的示例代码:
package main import ( "fmt" "github.com/dgrijalva/jwt-go" "time" ) const ( SECRETKEY = "SSDaizwsprivateXRTHHsYsSS" //私钥 ) func main() { // 生成 claim 数据 claims := jwt.MapClaims{ "id": 1, // 私有数据,我们填充了用户id 为 1 "name": "aizws", // 非必须,可以填充用户名 "exp": time.Now().Add(time.Duration(60*60*24)*time.Second).Unix(), // 必须设置过期时间,我们设置了 1 天 } // 生成 token token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenStr, err := token.SignedString([]byte(SECRETKEY)) if err!=nil { fmt.Println(err) } fmt.Printf("token: %v\n", tokenStr) // 解析 token ret, err :=ParseToken(tokenStr) if err!=nil { fmt.Println(err) } fmt.Printf("userinfo: %v\n", ret) } // 解析 token func ParseToken(tokenStr string)(jwt.MapClaims,error) { token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) { // Don't forget to validate the alg is what you expect: if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) } // hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key") return []byte(SECRETKEY), nil }) if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { return claims,nil } else { return nil,err } }
PHP 支持 JWT 机制。JWT 将用户信息加密到 token 里,客户端与服务端通过 JWT 交互,服务器不保存任何用户信息。服务器通过使用保存的密钥验证 token 的正确性,只要正确即通过验证。基于toke ...