从文件加载 RSA 密钥以进行安全 JWT 签名
签署 JWT 通常需要使用 RSA 私钥进行身份验证和完整性验证。要利用这些密钥,了解从文件中提取它们的过程至关重要。
PEM 编码的 RSA 私钥
存储 RSA 私钥的最常见格式key 是 PEM 编码,用“-----BEGIN RSA PRIVATE KEY-----”和“-----END RSA PRIVATE KEY-----”页眉和页脚表示。要加载 PEM 编码的密钥,您可以使用以下步骤:
import ( "crypto/x509" "encoding/pem" ) func LoadPEMKey(file string) (*x509.PrivateKey, error) { pemBytes, err := os.ReadFile(file) if err != nil { return nil, err } block, _ := pem.Decode(pemBytes) return x509.ParsePKCS1PrivateKey(block.Bytes) }
PKCS#8 编码的 RSA 私钥
PKCS#8 是另一种流行的格式用于存储 RSA 私钥。它通常与 PKCS#12 格式结合使用,将密钥和证书存储在单个文件中。要加载 PKCS#8 编码的密钥,请按照以下步骤操作:
import ( "crypto/rsa" "crypto/x509" "encoding/pem" ) func LoadPKCS8Key(file string) (*rsa.PrivateKey, error) { pemBytes, err := os.ReadFile(file) if err != nil { return nil, err } block, _ := pem.Decode(pemBytes) return x509.ParsePKCS8PrivateKey(block.Bytes) }
示例用法
将 RSA 私钥加载到结构中后,您可以可以用它来签署 JWT 并验证签名。例如:
import ( "crypto/rsa" "crypto/x509" "encoding/json" "github.com/golang-jwt/jwt/v4" ) func SignJWT(keyFile string, claims map[string]interface{}) (string, error) { key, err := LoadPEMKey(keyFile) if err != nil { return "", err } token := jwt.NewWithClaims(jwt.SigningMethodRS512, jwt.MapClaims(claims)) return token.SignedString(key) }
通过利用这些技术,您可以有效地利用存储在文件中的 RSA 私钥进行 JWT 身份验证和授权。
以上是如何从文件加载 RSA 密钥以进行安全 JWT 签名?的详细内容。更多信息请关注PHP中文网其他相关文章!