# Join\_meeting\_failed

**URL:** <https://devforum.zoom.us/t/join-meeting-failed/89758>\
**Category:** Web\
**Created:** [June 7, 2023, 9:33am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758 "2023-06-07T09:33:16Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![efren](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@efren](https://devforum.zoom.us/u/efren)\
**Post date:** [June 7, 2023, 9:33am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/1 "2023-06-07T09:33:16Z")

</div>

Hi,

Hi have the following issue joining zoom meetings using the web sdk since yesterday.

When the users try to join the room, we get the following error message

1. errorCode: 200
2. reason: “Fail to join the meeting.”
3. type: “JOIN\_MEETING\_FAILED”

Our joining code lines are the following:

const config = {  
sdkKey: Config.get().zoomSDK.KEY,  
signature: data.signature,  
meetingNumber: data.meeting.zoomId,  
password: data.meeting.zoomPwd,  
userName: data.userDisplayName  
}

```
  console.log("Zoom Config", config);

  this.client
    .join(config)

```

We’re using the web SDK version 2.13

---

<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:** [June 8, 2023, 12:48am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/2 "2023-06-08T00:48:45Z")

</div>

@efren

1. Was this working before yesterday?
2. Was there an upgrade in version?
3. Could you share your JWT token used to join the meeting?

---

<div class="post-metadata">

**Author:** ![efren](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@efren](https://devforum.zoom.us/u/efren)\
**Post date:** [June 12, 2023, 8:26am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/3 "2023-06-12T08:26:59Z")

</div>

Hi @chunsiong.zoom

This is a signature example used last thursday:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBLZXkiOiI2UElqQUxGcFNJNm9kOHpqMXNSVUZBIiwic2RrS2V5IjoiNlBJakFMRnBTSTZvZDh6ajFzUlVGQSIsIm1uIjo4Njg5MDA2MDMxMiwicm9sZSI6MSwiaWF0IjoxNjg2MjEzODQ1LCJleHAiOjE2ODYzMDAyNDUsInRva2VuRXhwIjoxNjg2MzAwMjQ1fQ.v-O6J0l26nlMinjc\_JnbGsJBuE4unJ-kAYbfpQP8Zdo

It was working days before. From time to time we receive the message “JOIN\_MEETING\_FAILED” or the “Signature has expired”

Our code to generate the signature is the following:

```auto
 private static long ToEpoch(DateTime value) => (value.Ticks - 621355968000000000) / (10000 * 1000);
        
public static string GetSignature(long meetingNumber, string sdkKey, string sdkSecret)
        {
            var now = DateTime.UtcNow;
            int roleId = 1;
            var iat = ToEpoch(now);
            var exp = ToEpoch(now.AddDays(1));
            var payload = new Dictionary<string, object>()
          {
              { "appKey", sdkKey },
              { "sdkKey", sdkKey },
              { "mn", meetingNumber },
              { "role", roleId },
              { "iat", iat },
              { "exp", exp },
              { "tokenExp", exp },
          };
            return Jose.JWT.Encode(payload, Encoding.UTF8.GetBytes(sdkSecret), JwsAlgorithm.HS256);
        }

```

---

<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:** [June 12, 2023, 8:40am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/4 "2023-06-12T08:40:20Z")

</div>

@efren

do you generate a new signature every time someone joins a meeting?

---

<div class="post-metadata">

**Author:** ![efren](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@efren](https://devforum.zoom.us/u/efren)\
**Post date:** [June 12, 2023, 9:05am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/5 "2023-06-12T09:05:50Z")

</div>

Hi @chunsiong.zoom

Yes,

When the user using the web wants to join a meeting, it asks the server for the signature.  
The signature is generated at server side.

The next user joining the meeting gets another signature because the “iat” and the “exp” have changed.

---

<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:** [June 12, 2023, 9:20am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/6 "2023-06-12T09:20:36Z")

</div>

This looks perfectly ok. What’s the version of web sdk which you are using?

---

<div class="post-metadata">

**Author:** ![efren](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@efren](https://devforum.zoom.us/u/efren)\
**Post date:** [June 12, 2023, 10:31am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/8 "2023-06-12T10:31:04Z")

</div>

We’re using the web SDK version 2.13

---

<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:** [June 14, 2023, 2:37am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/9 "2023-06-14T02:37:28Z")

</div>

@efren ,

**Signature has expired**  
I can’t be certain yet, but there is possibility if this javascript is running on client side (on the user’s browser), wrong timing from the user’s PC / Mac might cause the “Signature has expired” issue.

One way of reducing such issue would be to run the signature generator on a server, and expose it as a secure + authenticated web-service.

Another way would be to call an API for time, instead of using DateTime.UTCNow.

**JOIN\_MEETING\_FAILED**  
One area we can try, would be to separate the roles between meeting host and meeting participants. Meeting host should be using “role” : 1, whereas participants should be using “role”: 0

If this issue still occurs, let me know. We can dig deeper into it.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/3X/6/1/614bdd549b610bbaa46ff934617683a02bdaa03c.png) [@system](https://devforum.zoom.us/u/system)\
**Post date:** [July 14, 2023, 12:37pm UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/10 "2023-07-14T12:37:45Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![gianni.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/gianni.zoom/32/32523_2.png) [@gianni.zoom](https://devforum.zoom.us/u/gianni.zoom)\
**Post date:** [August 10, 2023, 9:30pm UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/11 "2023-08-10T21:30:17Z")

</div>



---

<div class="post-metadata">

**Author:** ![efren](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@efren](https://devforum.zoom.us/u/efren)\
**Post date:** [August 11, 2023, 6:55am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/12 "2023-08-11T06:55:12Z")

</div>

Hi @chunsiong.zoom ,

We still have the “Signature has expired” issue. It happens to us several times a day.

you suggested do the following:

**I can’t be certain yet, but there is possibility if this javascript is running on client side (on the user’s browser), wrong timing from the user’s PC / Mac might cause the “Signature has expired” issue.**

**One way of reducing such issue would be to run the signature generator on a server, and expose it as a secure + authenticated web-service.**

This is how our system is working. When the client web wants to join the meeting, it makes an web api request to the server and it calculate a signature an that moment using the code I showed in one of my previous reply.

What else could I try ? I there any log where I can see the problem with more details ?

Regards

---

<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:** [August 11, 2023, 7:42am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/14 "2023-08-11T07:42:47Z")

</div>

@efren , how long are you setting the expiry for?

---

<div class="post-metadata">

**Author:** ![efren](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@efren](https://devforum.zoom.us/u/efren)\
**Post date:** [August 11, 2023, 9:56am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/15 "2023-08-11T09:56:43Z")

</div>

Hi @chunsiong.zoom,  
We set the expiry for one day. The code that generates the signature is the following:

```
    private static long ToEpoch(DateTime value) => (value.Ticks - 621355968000000000) / (10000 * 1000);
    public static string GetSignature(long meetingNumber, string sdkKey, string sdkSecret)
    {
        var now = DateTime.UtcNow;
        int roleId = 1;
        var iat = ToEpoch(now);
        var exp = ToEpoch(now.AddDays(1));
        var payload = new Dictionary<string, object>()
      {
          { "appKey", sdkKey },
          { "sdkKey", sdkKey },
          { "mn", meetingNumber },
          { "role", roleId },
          { "iat", iat },
          { "exp", exp },
          { "tokenExp", exp },
      };
        return Jose.JWT.Encode(payload, Encoding.UTF8.GetBytes(sdkSecret), JwsAlgorithm.HS256);
    }

```

---

<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:** [August 11, 2023, 11:22am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/16 "2023-08-11T11:22:20Z")

</div>

@efren ,

it seems the code is ok.

I would do something like

var iat = ToEpoch(now.AddSeconds(-60));  
var exp = ToEpoch(now.AddDays(1));

For the meeting which you are joining, are they created by users in the same account or users in external accounts?

---

<div class="post-metadata">

**Author:** ![efren](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@efren](https://devforum.zoom.us/u/efren)\
**Post date:** [August 11, 2023, 12:34pm UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/17 "2023-08-11T12:34:01Z")

</div>

> [@chunsiong.zoom](#):
>
> var iat = ToEpoch(now.AddSeconds(-60));  
> var exp = ToEpoch(now.AddDays(1));

Hi @chunsiong.zoom thanks for you answer.

I’ve changed the iat as you suggested, I’ve done some tests and it seems it works properly!! Let’s wait for the users usage.  
I’ll come back to you if the issue happens again.

Regards

---

<div class="post-metadata">

**Author:** ![efren](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@efren](https://devforum.zoom.us/u/efren)\
**Post date:** [September 29, 2023, 9:50am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/18 "2023-09-29T09:50:37Z")

</div>

Hi @chunsiong.zoom the frequency of this issue has decreased but we still are having it. Twice today.  
Any suggestion to fix it?  
Is there any log to check what is the problem ?

We are a bit frustrated because it is an issue that appears from time to time and we can’t tell the client that it’s solved.

Thanks in advance,

---

<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:** [October 2, 2023, 2:59am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/19 "2023-10-02T02:59:10Z")

</div>

@efren , do you know what error message was given?

---

<div class="post-metadata">

**Author:** ![efren](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@efren](https://devforum.zoom.us/u/efren)\
**Post date:** [October 2, 2023, 8:13am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/20 "2023-10-02T08:13:45Z")

</div>

Hi @chunsiong.zoom ,

The “signature has expired” error message.

Regards,

---

<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:** [October 2, 2023, 8:18am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/21 "2023-10-02T08:18:20Z")

</div>

@efren , are you currently just doing -1 minute for IAT?

we might be able to try doing a more flexible time range for IAT. Maybe -30 mins or -60 mins?

---

<div class="post-metadata">

**Author:** ![efren](https://avatars.discourse-cdn.com/v4/letter/e/c0e974/32.png) [@efren](https://devforum.zoom.us/u/efren)\
**Post date:** [October 2, 2023, 8:27am UTC](https://devforum.zoom.us/t/join-meeting-failed/89758/22 "2023-10-02T08:27:29Z")

</div>

Hi @chunsiong.zoom ,

I set -3 min and it continue happening few times every week. I will try with -60 min.  
Is there any place to see logs or something ?

The same app has Android SDK Users and last week all android users were kicked out at the same time. I was looking for a log of the session to understand the problem. A log of the session exists?

Thanks,

[Next page](https://devforum.zoom.us/t/join-meeting-failed/89758.md?page=2)
