簡體   English   中英

Auth0:使用算法簽名時無法生成令牌的簽名:SHA256withECDSA

[英]Auth0: The Token's Signature couldn't be generated when signing using the Algorithm: SHA256withECDSA

每個人。 我正在嘗試使用 auth0 ECDSA256 算法使用 ES256 簽署 JWT 信息和 JWT 數據。

ECPublicKey publicKeyRs = getPublicKey();
    ECPrivateKey privateKeyRs = getPrivateKey();
    Algorithm algorithmRs = Algorithm.ECDSA256(publicKeyRs, privateKeyRs);

    signedToken = JWT.create()
    .withExpiresAt(new Date())
    .withSubject(jwtData.getSub()).
    withAudience(jwtData.getAud()).sign(algorithmRs);

但是當我運行標志 function 來創建 JWT 時,我遇到了這個錯誤:

Exception in thread "main" com.auth0.jwt.exceptions.SignatureGenerationException: The Token's Signature couldn't be generated when signing using the Algorithm: SHA256withECDSA
at com.auth0.jwt.algorithms.ECDSAAlgorithm.sign(ECDSAAlgorithm.java:65)
at com.auth0.jwt.JWTCreator.sign(JWTCreator.java:441)
at com.auth0.jwt.JWTCreator.access$100(JWTCreator.java:26)
at com.auth0.jwt.JWTCreator$Builder.sign(JWTCreator.java:419)

它是由以下原因引起的:

Caused by: java.security.SignatureException: Invalid DER signature format.
at com.auth0.jwt.algorithms.ECDSAAlgorithm.DERToJOSE(ECDSAAlgorithm.java:118)
at com.auth0.jwt.algorithms.ECDSAAlgorithm.sign(ECDSAAlgorithm.java:63)
... 6 more

請您幫忙解決這些錯誤並告訴我哪里出錯了?

這是一個簡單的示例,說明如何使用 ES256 獲取簽名的 JWT 令牌以及如何驗證它:

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;

import java.security.KeyPair;
import java.time.LocalDate;

public class Jwt {

    public static void main(String[] args) {
        KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.ES256);

        //generate signed JWT token
        String signedToken = Jwts.builder()
                .setExpiration(java.sql.Date.valueOf(LocalDate.now().plusWeeks(2)))
                .setSubject("your subject")
                .setAudience("your audience")
                .signWith(keyPair.getPrivate())
                .compact();

        //verify signed JWT token (no exceptions means check is OK)
        Jws<Claims> claimsJws = Jwts.parser()
                .setSigningKey(keyPair.getPublic())
                .parseClaimsJws(signedToken);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM