Hi Alex

Try to produce SecretKEy not Key

@Produces
@ApplicationScoped
public SecretKEy generate(){
}

@Inject
SecretKey keyforsigning;

Best

Uday
ManageCat, http://www.managecat.com <http://www.managecat.com/> 

> On 19 Sep 2015, at 10:33, Alex Soto <[email protected]> wrote:
> 
> Hello, I am developing a very simple Java EE application that generates a
> JWT token. Currently I am using JJWT library to generate it. To generate a
> token I need the claims and a key. For generating the key I am using next
> code:
> 
> public class SecretKeyProducer {
> 
>  @Produces
>  @ApplicationScoped
>  public Key generateJwtSignKey() {
>    return MacProvider.generateKey();
>  }
> 
> }
> 
> 
> Then I inject the key in the service responsible to create the token:
> 
> @Inject
> Key keyForSigning;
> 
> public String generateToken(String login) {
>  System.out.println(keyForSigning);
>  final String token =
> Jwts.builder().setSubject(login).signWith(SignatureAlgorithm.HS256,
> keyForSigning).compact();
>  return token;
> }
> 
> 
> The problem is that next exception is thrown:
> 
> java.lang.IllegalArgumentException: MAC signatures must be computed and
> verified using a SecretKey.  The specified key of type
> org.apache.webbeans.custom.security.Key$$OwbNormalScopeProxy0 is not a
> SecretKey.
> 
> The problem is that JJWT do an instanceof:
> 
> public MacSigner(SignatureAlgorithm alg, Key key) {
>    super(alg, key);
>    Assert.isTrue(alg.isHmac(), "The MacSigner only supports HMAC
> signature algorithms.");
>    if (!(key instanceof SecretKey)) {
>        String msg = "MAC signatures must be computed and verified
> using a SecretKey.  The specified key of " +
>                     "type " + key.getClass().getName() + " is not a
> SecretKey.";
>        throw new IllegalArgumentException(msg);
>    }
> }
> 
> 
> So is there a way from CDI point of view to fix this?
> 
> Thank you very much.



Reply via email to