Signature is invalid - 3712 in javascript

Hi,

Below code I have followed in Javascript but i got signature invalid :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="base-uri 'self'; default-src 'self'; worker-src blob:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval' http://zoom.us *.zoom.us blob:; img-src 'self' *.zoom.us data:; media-src 'self' .zoom.us; font-src 'self' source.zoom.us data:; connect-src 'self' 'unsafe-eval' https://*.zoom.us wss://*.zoom.us;">
    <title>Your Title</title>
    <!-- Dependencies for client view and component view -->
    <script src="https://source.zoom.us/3.1.0/lib/vendor/react.min.js"></script>
    <script src="https://source.zoom.us/3.1.0/lib/vendor/react-dom.min.js"></script>
    <script src="https://source.zoom.us/3.1.0/lib/vendor/redux.min.js"></script>
    <script src="https://source.zoom.us/3.1.0/lib/vendor/redux-thunk.min.js"></script>
    <script src="https://source.zoom.us/3.1.0/lib/vendor/lodash.min.js"></script>

    <!-- Choose between the client view or component view: -->

    <!-- CDN for client view -->
    <script src="https://source.zoom.us/zoom-meeting-3.1.0.min.js"></script>

    <!-- CDN for component view -->
    <script src="https://source.zoom.us/zoom-meeting-embedded-3.1.0.min.js"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jsrsasign/10.1.0/jsrsasign-all-min.js"></script>
</head>
<body class="ReactModal__Body--open">

    <!-- added on import -->
    <div id="zmmtg-root"></div>
    <div id="aria-notify-area"></div>
  
    <!-- added on meeting init -->
    <div class="ReactModalPortal"></div>
    <div class="ReactModalPortal"></div>
    <div class="ReactModalPortal"></div>
    <div class="ReactModalPortal"></div>
    <div class="global-pop-up-box"></div>
    <div class="sharer-controlbar-container sharer-controlbar-container--hidden"></div>
  
</body>
<script>
  function generateSignature(key, secret, meetingNumber, role) {
    const now = Math.floor(Date.now() / 1000); // Unix timestamp in seconds
    console.log(now);
    const iat = now - 30; // Issued at timestamp 30 seconds earlier
    const exp = now + (60 * 60 * 2); // Expiry timestamp: current timestamp + 2 hours
    const tokenExp = exp; // Token expiry same as JWT expiry for simplicity

    const oHeader = { alg: 'HS256', typ: 'JWT' };
    const oPayload = {
      appKey: key,
      sdkKey: key,
      mn: meetingNumber,
      role: role,
      iat: iat,
      exp: exp,
      tokenExp: tokenExp
    };

    const sHeader = JSON.stringify(oHeader);
    const sPayload = JSON.stringify(oPayload);

    const signatureInput = KJUR.jws.JWS.sign(null, sHeader, sPayload, secret);

    return signatureInput;
  }
      
      // You need to provide values for Zoom meeting SDK key, SDK secret, meeting number, and role
      const zoomMeetingSDKKey = 'xxxxxxxxxxxxxxxxx';
      const zoomMeetingSDKSecret = 'xxxxxxxxxxxxxxxxxxx';
      const meetingNumber = 87871111111;
      const passWord = '11xxx1';
      const userName = 'xxx';
      const role = 0;
      const leaveUrl = 'https://test.com';
      const signature = generateSignature(zoomMeetingSDKKey, zoomMeetingSDKSecret, meetingNumber, role);

      ZoomMtg.init({
        leaveUrl: leaveUrl,
        success: (success) => {
          ZoomMtg.join({
            sdkKey: zoomMeetingSDKKey,
            signature: signature, // role in SDK signature needs to be 0
            meetingNumber: meetingNumber,
            passWord: passWord,
            userName: userName,
            success: (success) => {
              console.log(success)
            },
            error: (error) => {
              console.log(error)
            }
          })
        },
        error: (error) => {
          console.log(error)
        }
      })
      
      console.log(signature);

</script>

</html>

Thanks for your attention. I’m looking forward to your reply.

@neelu could you confirm if

zoomMeetingSDKKey & zoomMeetingSDKSecret are from either

General App

  • ClientID
  • Client Secret

or

Meeting SDK App

  • ClientID
  • Client Secret

or

Meeting SDK App (older versions only)

  • SDK Key
  • SDK Secret

Yes, I used these credentials (meetingSDK Credentials )

screenshot attached below :

@chunsiong.zoom

@neelu I’ll PM you for more details