🔑

golang-jwt/jwt/v5を使ってEdDSAで署名しようとしたら「key is of invalid type」と怒られた

2023/11/01に公開

対象読者

解消方法

結論から言うとkeyの型をed25519.PrivateKeyにする必要があります。
crypto/ed25519のimportも必要です)
以下、自コードからの抜粋になります。参考にしてみてください。

func generateJWT(key ed25519.PrivateKey) (string, error) {
	token := jwt.NewWithClaims(jwt.SigningMethodEdDSA, jwt.MapClaims{...})
	return token.SignedString(key)
}

エラーの原因

https://golang-jwt.github.io/jwt/usage/signing_methods/#signing-methods-and-key-types から https://pkg.go.dev/crypto/ed25519#PrivateKey を読んでみると、期待されている型がcryptoに存在するようです。

PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer.

[]byte(key)で定義していたkeyの型をed25519.PrivateKeyに変更することでエラーは解消されました。

Discussion