# Signature is invalid - 3712 in javascript

**URL:** <https://devforum.zoom.us/t/signature-is-invalid-3712-in-javascript/104971>\
**Category:** Meeting SDK\
**Created:** [March 4, 2024, 5:40am UTC](https://devforum.zoom.us/t/signature-is-invalid-3712-in-javascript/104971 "2024-03-04T05:40:33Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![neelu](https://avatars.discourse-cdn.com/v4/letter/n/ecccb3/32.png) [@neelu](https://devforum.zoom.us/u/neelu)\
**Post date:** [March 4, 2024, 5:40am UTC](https://devforum.zoom.us/t/signature-is-invalid-3712-in-javascript/104971/1 "2024-03-04T05:40:33Z")

</div>

Hi,

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

```auto
<!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.

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [March 4, 2024, 5:58am UTC](https://devforum.zoom.us/t/signature-is-invalid-3712-in-javascript/104971/2 "2024-03-04T05:58:13Z")

</div>

@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

---

<div class="post-metadata">

**Author:** ![neelu](https://avatars.discourse-cdn.com/v4/letter/n/ecccb3/32.png) [@neelu](https://devforum.zoom.us/u/neelu)\
**Post date:** [March 4, 2024, 6:13am UTC](https://devforum.zoom.us/t/signature-is-invalid-3712-in-javascript/104971/3 "2024-03-04T06:13:34Z")

</div>

Yes, I used these credentials (meetingSDK Credentials )

screenshot attached below :

> **[Screenshot-2024-03-04-114150 hosted at ImgBB](https://ibb.co/DPXtZ4z)**
>
> Image Screenshot-2024-03-04-114150 hosted in ImgBB

@chunsiong.zoom

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [March 4, 2024, 6:30am UTC](https://devforum.zoom.us/t/signature-is-invalid-3712-in-javascript/104971/4 "2024-03-04T06:30:51Z")

</div>

> [@neelu](#):
>
> `generateSignature`

@neelu I’ll PM you for more details
