go JWT RS256 加解密 “key is of invalid type”
go JWT RS256 加解密 “key is of invalid type” import ( fmt github.com/dgrijalva/jwt-go time ) func signed(name string, key interface{}) (string, error) { tk := jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{ exp: fmt.Sprintf(%d, time.Now().Add(time.Minute).Unix()), //exp: 在Go语言中,JSON Web Token (JWT) 是一种常见的用于身份验证和授权的机制。JWT 使用数字签名来确保令牌的完整性和安全性。本问题主要涉及JWT的创建(签名)和解析(解密)过程,特别是在使用RS256算法时遇到的错误:"key is of invalid type"。 RS256,即RSA-SHA256,是一种基于非对称加密的签名算法,它需要一个RSA公钥来验证签名,一个RSA私钥来创建签名。在Go中,通常使用`dgrijalva/jwt-go`库来处理JWT操作。 让我们分析给出的代码片段: 1. `signed`函数用于创建JWT。它使用`jwt.NewWithClaims`方法创建一个带有指定签名校验方法(SigningMethodRS256)的JWT,并设置一些声明(Claims),如过期时间(exp)、主题(sub)、名字(name)等。然后使用`SignedString`方法将这些声明与提供的私钥一起签名,生成最终的JWT字符串。 ```go tk := jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{ "exp": fmt.Sprintf("%d", time.Now().Add(time.Minute).Unix()), // ... }) return tk.SignedString(key) ``` 2. `pares`函数负责解析JWT。`jwt.Parse`方法尝试解析给定的令牌字符串。它接收一个回调函数,用于提供正确的验证密钥。在这个例子中,我们检查了签名方法是否为`jwt.SigningMethodRSA`,如果不是,则返回错误。 ```go token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok { return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) } return key, nil }) ``` 现在,来看一下错误:“key is of invalid type”。这个错误通常表示提供的验证密钥类型不正确。在RSA算法中,密钥应该是一个`*rsa.PrivateKey`或`*rsa.PublicKey`类型的对象。如果你直接传递一个字符串或者Base64编码的密钥,就会导致此错误。 在测试代码中,可以看到一个私钥的Base64编码字符串。为了使用这个私钥,你需要先将其解码并转换为`*rsa.PrivateKey`: ```go // 解析PEM编码的私钥 block, _ := pem.Decode([]byte(privateKey)) if block == nil { panic("无法解码私钥") } // 从PEM块中提取RSA私钥 privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes) if err != nil { panic(err) } ``` 然后,你可以用这个解析后的私钥调用`SignedString`和`Parse`方法: ```go tokenString := signed("John Doe", privateKey) claims, _ := pares(tokenString, privateKey) ``` 总结来说,要解决"key is of invalid type"的错误,你需要确保在签名和解析JWT时使用的密钥是正确的类型,对于RS256算法,这意味着使用`*rsa.PrivateKey`进行签名,`*rsa.PublicKey`用于验证。在Go中,你需要从Base64编码的字符串或者PEM格式的文件中正确解析和转换密钥。
































- 粉丝: 5
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 新医改背景下医院档案信息化建设分析.docx
- 知名地产物业管理就是服务.ppt
- 中国工程造价咨询业发展报告.ppt
- 阿里巴巴绩效考核制度.doc
- 给水管材-钢塑复合管.doc
- 基于行动导向的办公软件教学探究.docx
- 学校运动场塑胶跑道工程竣工报告.doc
- 房地产开发流程培训.ppt
- WizdomCloudUrban-EP-RM-034-监督指挥系统(标准版)用户操作手册v1.0.doc
- [北京]住宅楼木胶合板模板施工方案.doc
- 桩基施工中常见质量问题的分析与处理.doc
- 桥梁工程概预算设计.doc
- 【无线通信测试工程师认证II级】ATMCWTC.doc
- 基于质量视角下的工程监理项目管理策略.docx
- 有限元法计算双层框架.doc
- 家用护理设备行业发展趋势分析-随着家用护理设备电子化自动化时代到来推动.docx



评论0