Meeting SDK Type and Version
Error Present in 2.9.7 and in 2.14.0
Description
This happens randomly and sporadically when joining a meeting and clicking retry 1 or more times resolves it. Sometimes you have to click retry 5 times, sometimes 2 times, it’s completely arbitrary. Many meetings start fine, many meetings have this error.
The ZoomMtg.join({error: function()}) lambda never gets called for these errors like it does for many other errors. So no additional error info or detail can be retrieved.
Error?
Troubleshooting Routes
We click Retry until it works.
For testing, I intentionally created a signature that would be expired, but that triggers the error lambda where I print the error detail to the console and the detail indicates the signature is expired. I get no such additional error detail when this occurs, so I don’t believe this is an issue with signature generation.
It is very difficult to troubleshoot generic, non-descriptive errors especially when we cannot see any detailed information, or in many cases when the detailed error data itself is generic and not descriptive or specific. I must once again renew my desperate plea for Zoom to provide adequately descriptive errors that actually explain the problem.
How To Reproduce
Meeting SDK/OAuth/ZAK token*
See above for the only error: Joining Meeting Timeout - Fail to Join Meeting
Chrome Version 115.0.5790.171 & other supported versions
Start a meeting with the Meeting SDK/Client View
Attempt to join the meeting
Click Join Meeting on the Video/Microphone test page
Can you please record this testing process. When you are done, message me your developer email associated the Meeting SDK, client id, link to the recording and the meeting id for the join meeting testing you concluded. I will private message you now so we have a thread where you can send this.
@sales1 , could you try setting the IAT time to a slightly earlier time, say 5 mins earlier? There is a possibility that there is some time difference / time drift between different systems
@chunsiong.zoom I tried that as part of my testing attempting to duplicate/force the error. That throws a slightly different error and calls the error lambda with the error information.
I’ve tested both by forcing the signature to be in the future and in the past (expired) and both return fairly sensible errors and call the error lambda every time with error information. For expired signatures the error states that the signature is expired and for future signatures if I recall correctly it says the signature is invalid.
Do you have SDK key & SDK secret in App Credentials section of your Meeting SDK app in App Marketplace? Or only Client ID & Client Secret?
For the API calls, do you have a separated OAuth app, or are you using the OAuth integrated in Meeting SDK app?
Are you creating the meeting with OAuth for an external user, and then joining as host with the user ZAK token? Or you only use the OAuth / Meeting SDK for your own account / sub-accounts?
Have you checked if the error happens with your own account?
After a lot of testing and comparing the config for successful joins against unsuccessful joins, I discovered there was, in fact, an unreported issue with the signing token in our signature. I think this should trigger a specific error, or at least a signature error. This error and behaviour of this error was unnecessarily baffling and had us looking everywhere but the problem.
If you’re working in .Net you don’t have a good option for base 64 URL encoding that zoom supports out of the box. Unfortunately Zoom (at least when I read it) doesn’t specify which character replacements that need to happen for signatures to work, just that “=” need to be trimmed from the end of tokens.
You may think that HttpServerUtility.UrlTokenEncode does what you need, but it adds a substitution digit to replace the “=” signs though it does encode “+” and “/” correctly. Your other option is to find Base64UrlEncoder buried in the Microsoft.IdentityModel.Tokens namespace that comes with a ton of different dependencies for you to use 1 function and probably won’t come up much if you’re googling this unless you dig through StackOverflow comments.
The below function can be used to encode all 3 sections of the JWT token/signature that is needed to start/join meetings with Zoom.
Hopefully Zoom will make the effort to update the error reporting to be more specific/clear; at least clear enough to identify the issue causing joining the meeting to fail. Ideally they will also eliminate abnormal behaviour (not calling the error lambda) with errors. This way these things are more predicable and loggable and we can at least know where to focus our effort when debugging. It’s one thing to not be able to report “there is a + symbol in your signature” but at the very least you should be able to report “the signature is not valid” and make sure the error lambda is called as expected so the developer can log these errors instead of relying on screenshots from end users.
Code for VB.Net developers to encode their signatures for Zoom. Feel free to use this if you found this post searching the forum with a similar issue. Zoom also has permission to use this in their documentation if they want.
''' <summary>
''' Generates an RFC compliant Base64 URL Encoded string
''' </summary>
''' <param name="data">Byte array of the data to encode</param>
''' <remarks>
''' RFC 4648 - https://datatracker.ietf.org/doc/html/rfc4648#section-5
''' RFC 7515 - https://datatracker.ietf.org/doc/html/rfc7515#section-2
''' </remarks>
''' <returns>RFC Compliant Base 64 URL Encoded String</returns>
Public Shared Function Base64UrlEncode(ByVal data As Byte()) As String
Dim base64Data As String = Convert.ToBase64String(data)
base64Data = base64Data.Replace("+", "-") ' Required by RFC 4648; Section 5
base64Data = base64Data.Replace("/", "_") ' Required by RFC 4648; Section 5
base64Data = base64Data.TrimEnd("=") ' Required by RFC 7515; Section 2
Return base64Data
End Function