Can't create JWT App after creating SDK App

Description
I tried to stand up the basic example encapsulated by:

Through that process I eventually ended up speculatively creating a SDK App in the marketplace and ran aground with “Invalid Signature” errors on the front end. Searching this forum it became clear to me that I should have created a JWT app rather than an SDK App.

I went back to the Zoom Marketplace to try and remedy the situation, but when I clicked Develop → Build App I can’t create a new app; the only thing I see there is:

image

… and I’ve dug around to the best of my ability and can’t see how to remove this app (seems impossible). I can deactivate the app, but that has no affect on my ability to create a new App.

At this point it feels like my only viable course of action is to scrap the account I created to be my dev account, deactivate my failed attempt at creating and app, and start over with a new account. This feels pretty heavy handed to me, especially given that I attached payment information to the account. Am I missing something?

Error
The full error message or issue you are running into.
N/A

Which Web Client SDK version?
N/A

To Reproduce(If applicable)
N/A

Screenshots
N/A

Device (please complete the following information):
N/A

Additional context
N/A

So my theory that I missed a step was proven wrong by creating a second account. I simply am never offered the opportunity to create a JWT App at all. What am I missing?

So I went over to App Marketplace and logged in with my personal (paid/Pro) account and there I can see this:

It’s on the account that I “bought” the Video SDK with the “Pay as you Go” option I’m not offered the JWT App option. In case that helps anyone diagnose my problem. Am I incorrect in my assumption that I need the to create an fresh account and add buy the Video SDK to integrate Zoom into my web application? I certainly got the impression I needed to create a new account and buy into the Video SDK based on this dialog at https://zoom.us/buy/videosdk:

Greetings, @victor.aprea,

Thank you for posting in the Developer Forum- I am happy to clarify. Our Zoom API and Client SDKs are available to all Pro, Business, and Enterprise accounts with no additional cost. Registering and activating any Basic Zoom account will automatically provide free-trial Developer access to the Zoom API and SDKs. We recommend to use this free-trial period to test Zoom services and SDK functionality.

For more information about getting stated with our API and Client SDKs, you may visit our help documentation below:

  1. Developer Accounts
  2. API documentation
  3. SDK documentation

In regards to the Video SDK , if you wish to get access, you’ll need to first follow these steps:

  1. Visit https://developers.zoom.us/ to sign up for a new Zoom account, which will serve as your development account for your video customizable SDK
  2. Once your new account is enrolled in the Video SDK plan, you can access the Video SDK by logging into the Zoom App Marketplace using the new account.

:writing_hand: Once you have access, you should see it available as one of the app types under your new account here: App Marketplace

If you don’t see the Video SDK app type available, please ensure you’re logged into the account that was granted access. Please also take note of the prerequisite noted here as well—You can not access the Video SDK using your existing account if it is already enrolled in a free-trial plan, Pro plan or higher plans. You must sign up for a new account to enroll in the Video SDK plan.

After you’ve gained access and set up the app, you will have access to credentials (SDK Key & Secret) for the app and be able to download the desired SDK package (iOS, Android, Web).

Your developer can find step by step instructions for creating the app, generating credentials, and authenticating here:

Once this is set up, your developer will be able to test out the functionality covered here using these credentials/app:

I hope this information is helpful! Let me know if you have additional questions.

Best,
Donte

1 Like

@donte.S … thanks, but it seems to me a JWT App is required in order to get JWT API Key and Secrets. On a brand new account which I created only to buy the Video SDK and be separate from my personal account, I don’t get the option for a JWT App in the Create interface. If I try and use the Video SDK API Key and Secret on my server to generate the signature, the signatures are deemed invalid by the web Client code. Unfortunately, I remain lost as to what I’m intended to do to get this integration off the ground…

1 Like

Hi, @victor.aprea,

Correct, you can use your app credentials (SDK Key and Secret) located in the App Credentials tab to generate a JWT. Be sure that you use the signature with Video SDK. Also, you can decode a token at http://jwt.io/ and verify its structure. The payload section describes the authorization granted. Timestamps are in Unix epoch format. More information on Generating JWT for the Video SDK can be found in our help documentation here:

Please let me know if this helps to clarify.

Best,
Donte

@donte.S thanks… there are still a lot of ways this could be going wrong based on the documentation you are referencing here… I took a crack at taking this advice and experimenting and I’ve now gotten this far (rewriting the code here according to what I read there and using my SDK key and secret):

app.post('/', (req, res) => {

  const header = {
    alg: 'HS256',
    typ: 'JWT'
  };

  let payload = {
    app_key: ZOOM_SDK_API_KEY,
    version: 1,
    user_identity: req.user.name,
    tpc: req.body.meetingNumber
  };

  const token = jwt.sign(
    payload,
    ZOOM_SDK_API_SECRET,
    {
      algorithm: 'HS256',
      expiresIn: '1 days',
    });

  payload = jwt.decode(token);

  const b64Header = Buffer.from(JSON.stringify(header)).toString('base64');
  const b64Payload = Buffer.from(JSON.stringify(payload)).toString('base64');
  const msg = `${b64Header}.${b64Payload}`;
  const signature = crypto.createHmac('sha256', ZOOM_SDK_API_SECRET).update(msg).digest('base64');

  res.json({
    signature,
    apiKey: ZOOM_SDK_API_KEY
  });
}

Now I’m getting this response from Zoom on the front end:

{ 
  method: "join", 
  status: false, 
  result: "No permission", 
  errorMessage: undefined, 
  errorCode: 3713 
}

… which again doesn’t really tell me much about what is wrong with the signature I am using in the browser. I get the same exact response if I return some arbitrary string as the signature from my server route.

I’ve also tried with an equal amount of unsuccessful-ness:

app.post('/', (req, res) => {

  let payload = {
    app_key: ZOOM_SDK_API_KEY,
    version: 1,
    user_identity: req.user.name,
    tpc: req.body.meetingNumber
  };

  const token = jwt.sign(
    payload,
    ZOOM_SDK_API_SECRET,
    {
      algorithm: 'HS256',
      expiresIn: '1 days',
    });

  const msg = Buffer.from(JSON.stringify(token)).toString('base64');
  const signature = crypto.createHmac('sha256', ZOOM_SDK_API_SECRET).update(msg).digest('base64');

  res.json({
    signature,
    apiKey: ZOOM_SDK_API_KEY
  });
}

@donte.S back to the origin of this post… when I use the exact code from this page for NodeJS, I get a response from zoom on the front end that:

{method: "join", status: false, result: "Invalid signature.", errorMessage: undefined, errorCode: 3712}

… and my conclusion is that that code is not suitable for when you use SDK API Key and Secret somehow. So how do I get from where I am right now (I have a Video SDK application, with an associated SDK API Key and Secret) to a valid signature for use with the front end SDK join call. It’s “just math” please can you show me how to do it correctly?

Hi, @victor.aprea,

Thanks for reaching out! I’d be more than happy to help you. Can you try to generate the Signature using the guide linked below :

Please give that a try and let me know how it goes! Be sure to check out the subfolders for more information about getting started with the Video SDK.

Best,
Donte

@donte.S I’m getting a different error using that code in conjunction with Use the Zoom Web SDK in an Angular App. Lets take a big step back here. I think I must be mixing apples and oranges and expecting lemonade.

When I look at the Zoom documentation that starts here: https://marketplace.zoom.us/docs/sdk/video/ it’s very easy to get confused about what subset of this documentation I should be using / which path to go down because there’s so much of it. For our application, we want to create a multi-person video meeting that doesn’t take over the whole screen where people can see and talk to each other in smaller video windows while also looking at and interacting with our application; all of this happening in the web browser. I think this means I should be focused here: https://marketplace.zoom.us/docs/sdk/video/web. Please can you confirm that? I’m actually not entirely sure what this other thing is or when I would consider using it: https://marketplace.zoom.us/docs/sdk/native-sdks/web. Can you shed any light on that?

FWIW, the downloaded SDK Sample App is in React, and I’m not knowledgeable in that framework. I use Angular and Express, so that’s not very useful. Which is how my rather naive google search turning up the links in the original post on this topic lead my down this weird path.

Hi, @victor.aprea,

Correct, the Marketplace access and development process for our Web SDK and Video SDK are different. You’ll want to maintain separate developer credentials from the Web SDK when using the Video SDK. This is why you are seeing different App types when you logged in the Zoom Marketplace. The email address for your Video SDK developer account cannot be connected to an existing Zoom account.

To that end, our Web SDK is intended for implementations where the end user has a low-bandwidth environment, is behind a network firewall, or has restrictions on their machine which would prevent them from installing the Zoom Desktop or Mobile Clients. You can customize the user interface (UI) but it will require complex CSS and is not recommended. To get started with our Web SDK, please refer to the guide linked below:

On the other hand, if you are looking to get access to raw video and audio data to develop highly customized user interfaces.You likely want to use our Video SDK guide linked below. If you have more questions about developing with our Video SDK, I recommend posting in our #web-video-sdk category. Our developer team there will be a wonderful resource to you. They can answer any questions in relation to developing with the Video SDK.

For reference, I’ve linked our Comparing Zoom SDKs help documentation here. This guide provides an overview of the different SDKs features.

I hope this helps to clarify! Let me know if you have additional questions about any of this.

Best,
Donte

2 Likes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.