我有一个正在使用password授权的/token端点。因为它正在编码一个JWT令牌,所以它具有大约1秒的高延迟。有什么方法可以让签署JWT更快吗?
我在github.com/dgrijalva/jwt-go库中使用Go。
package main
import (
"crypto/rsa"
"git.snappfood.ir/golang/framework/assert"
"io/ioutil"
"time"
"github.com/dgrijalva/jwt-go"
"github.com/sirupsen/logrus"
)
var (
private *rsa.PrivateKey
public *rsa.PublicKey
)
func main() {
var err error
var priv, pub []byte
pub, err = ioutil.ReadFile("public.pem")
if err!=nil{
panic(err)
}
priv, err = ioutil.ReadFile("private.pem")
if err!=nil{
panic(err)
}
public, err = jwt.ParseRSAPublicKeyFromPEM(pub)
if err!=nil{
panic(err)
}
private, err = jwt.ParseRSAPrivateKeyFromPEM(priv)
if err!=nil{
panic(err)
}
data := map[string]interface{}{
"jti": "dara",
"scopes": func() []string {
return []string{"sara", "dara"}
}(),
"aud": "aud",
"sub": "",
}
cl := jwt.MapClaims{}
for k, v := range data {
cl[k] = v
}
cl["iat"] = time.Now().Add(-6 * time.Hour).Unix()
cl["exp"] = time.Now().UTC().Add(1 * time.Hour).Unix()
t := jwt.NewWithClaims(jwt.GetSigningMethod("RS256"), cl)
t2 := time.Now()
tokenString, err := t.SignedString(private)
assert.Nil(err)
logrus.Warn(time.Since(t2))
logrus.Warn(tokenString)
}发布于 2020-09-17 19:04:25
在Golang中,你可以随时降级到C级。但随之而来的是你的应用程序交付的复杂性大大增加。但如果有任何一个ms对你来说很重要,它可能是解决问题的办法。
但与此同时,(我还没有分析任何东西)它仍然在运行。您可以很容易地将私有/公共ParseRSAPrivateKeyFromPEM调用并行化以减少几毫秒
https://stackoverflow.com/questions/62244413
复制相似问题