2017-06-20 113 views
0

我试图解析令牌是这样的:的oauth2 - 解析令牌总是抛出异常

 Claims claims1 = Jwts.parser() 
        .setSigningKey(publicKey) 
        .parseClaimsJws(token); 

但我总是得到这样的例外:

java.lang.IllegalArgumentException: Key bytes cannot be specified for RSA signatures. Please specify a PublicKey or PrivateKey instance. 

然而,当我尝试同样的道理用我的公众和私钥https://jwt.io/,它被验证。两个问题:

  1. 是否需要指定私钥?如果是这样,我怎么能在我的代码中这样做?

  2. 事实上,现在我不关心签名验证 - 当然在将来。目前,我会很高兴回答如何解析令牌而不验证它。

回答

0

我假设你的publicKey是Base64编码的字符串。 在这种情况下,您需要对其进行解码并创建sun.security.rsa.RSAPublicKeyImpl的实例:

byte[] decode = TextCodec.BASE64.decode(publicKey); 
Key key = new RSAPublicKeyImpl(decode); 
Claims claims1 = Jwts.parser() 
       .setSigningKey(key) 
       .parseClaimsJws(token);