1

I am trying to use Zoom API which requires using JWT. I have successfully using node.js to generate JWT and call the Zoom API like this:

var jwt = require('jsonwebtoken');
var zoom_key = "abcd";
var zoom_secret = "efgh";
var payload = {
    iss: Zoom_Key,
    exp: ((new Date()).getTime() + 3600)
};

//Automatically creates header, and returns JWT
var token = jwt.sign(payload, zoom_secret);

module.exports = token;

However, right now I am trying to use the same way in JAVA. When I using the token by JJWT, it always give the the "invalid token" error message from zoom api. Can any one help me figure out the reason? First, I create a Playload class in Playload.java like this:

// in Playload.java
package palyload;

public class Playload {
    public String iss;

    public Playload(String iss) {
        this.iss = iss;
    }
}

Second, I import JJWT and play.libs.Json to generate JWT token like this:

package controllers;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import play.libs.Json;
import play.mvc.Controller;
import play.mvc.Result;
import palyload.Playload;


public class JWT extends Controller {

    private static final String zoom_key = "abcd";
    private static final String zoom_secret = "efgh";
    private static final String baseUrl = "https://api.zoom.us/v2/users/?access_token=";

    public String setToken (Object obj) {
        String token = "";
        Map<String, Object> map = new HashMap<>();
        map.put("json", Json.toJson(obj));
        try {
            token = Jwts.builder()
                    .setClaims(map)              
                 .setExpiration(Date.from(ZonedDateTime.now(ZoneId.systemDefault()).plusSeconds(3600).toInstant()))
                    .signWith(SignatureAlgorithm.HS256, zoom_secret)
                    .compact();
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        }
        System.out.println(Jwts.parser().setSigningKey(zoom_secret).parseClaimsJws(token).getBody().getSubject().toString());
        // System.out.println(map.toString());
        return token;
    }
    public String getToken () {
        Playload pl = new Playload(zoom_key);
        System.out.println("playload: " + Json.toJson(pl).toString());
        return setToken(pl);
    }
    public String setUrl () {
        return baseUrl + getToken();
    }
    public Result getUrl () {
        return ok(setUrl());
    }
}

Have no idea why this token url is not correct like Node.js one?

Zichen Ma
  • 907
  • 3
  • 14
  • 30

0 Answers0