2 Star 1 Fork 0

张明理 / sfw

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
token.go 1.14 KB
一键复制 编辑 原始数据 按行查看 历史
张明理 提交于 2020-09-30 12:43 . Initial commit of sfw
package signature
import (
"crypto/rsa"
"encoding/base64"
"encoding/json"
"fmt"
"strings"
)
// EncodeAndSignToken 编码和签名Token
func EncodeAndSignToken(token interface{}, priv *rsa.PrivateKey) (string, error) {
bytes, err := json.Marshal(token)
if err != nil {
return ``, err
}
sig, err := Sign(bytes, priv)
if err != nil {
return ``, err
}
return base64.StdEncoding.EncodeToString(bytes) + `.` + base64.StdEncoding.EncodeToString(sig), nil
}
// CheckToken 验证Token签名是否正确,如果正确则使用Json反序列化为传入结构
func CheckToken(tokenStr string, pub *rsa.PublicKey, token interface{}) error {
// 将Token字符串还原成数据和签名
vec := strings.Split(tokenStr, `.`)
if len(vec) != 2 {
return fmt.Errorf(`Invalid token string`)
}
bytes, err := base64.StdEncoding.DecodeString(vec[0])
if err != nil {
return err
}
sig, err := base64.StdEncoding.DecodeString(vec[1])
if err != nil {
return err
}
// 验证签名
_, err = Verify(bytes, sig, pub)
if err != nil {
return err
}
// 反序列化Token
err = json.Unmarshal(bytes, token)
if err != nil {
return err
}
return nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/terender/sfw.git
git@gitee.com:terender/sfw.git
terender
sfw
sfw
v0.1.1

搜索帮助

344bd9b3 5694891 D2dac590 5694891