Hello Zoom Developer Support Team,
We run a meeting recording / note-taking bot built on the Zoom Meeting SDK
for Web. The bot launches a headless Chromium and calls ZoomMtg.join(...)
with an OBF (On-Behalf-of) token that we obtain from
GET /users/{userId}/token?type=onbehalf&meeting_id={meetingId}
on behalf of the meeting’s authorized user.
For one specific tenant we are seeing a reproducible case where the bot
fails to join the meeting with:
errorCode: 4017
errorMessage: "Authorized user not in meeting"
The same SDK call path also emits, via onMeetingStatus:
meetingStatus: DISCONNECTED (3)
errorCode: 4017
errorMessage: "Authorized user not in meeting"
Reference for the error code:
The confusing part is that the OBF-target user (the “authorized user”)
is in the meeting as a visible participant at the time the bot tries
to join. The behavior depends entirely on how that user joined.
== Reproduction ==
Affected meeting (host side):
Meeting ID:
(It can be shared privately with Zoom support if needed.)
Same Zoom user, same OBF token, same SDK call, only the host’s join
client differs:
Authorized user joined via macOS Zoom desktop app (latest):
Bot join: FAILS with 4017
Authorized user joined via Windows x64 Zoom desktop app (latest):
Bot join: FAILS with 4017
Authorized user joined via Chrome on macOS (Zoom web client):
Bot join: SUCCEEDS
Authorized user joined via Chrome on Windows (Zoom web client):
Bot join: SUCCEEDS
Authorized user joined via iPhone Zoom mobile app (latest):
Bot join: SUCCEEDS
Network was varied across home (no VPN), corporate, and mobile tethering.
Behavior did not change: desktop app → 4017, browser/mobile → OK.
Reinstalling the Zoom desktop app on macOS did not help.
== Environment ==
Zoom Meeting SDK for Web: 6.0.0
(loaded directly from source.zoom.us:
zoom-meeting-6.0.0.min.js and the 6.0.0
vendor bundle)
Authorization method: OBF token only
(no ZAK, no recording token)
SDK signature: JWT, HS256, role=0 (participant),
exp = now + 6h, tokenExp = exp,
mn = meetingNumber, appKey = sdkKey
ZoomMtg.join argument shape (parameter values masked):
ZoomMtg.join({
sdkKey,
signature, // SDK JWT, role=0
meetingNumber,
userName, // bot display name
userEmail, // bot-internal fixed address
passWord,
tk, // registrant token (only when registration is required)
obfToken, // OBF on-behalf-of host
success, error,
});
== Expected behavior ==
If the authorized user (the user the OBF token was issued for) is
actually present in the meeting, ZoomMtg.join with that OBF token
should succeed, regardless of whether the authorized user joined the
meeting from the Zoom desktop app, a browser, or the mobile app.
== Actual behavior ==
The bot consistently receives errorCode 4017 (“Authorized user not in
meeting”) whenever the authorized user is participating from the Zoom
desktop app (macOS or Windows), even though that user is visibly in
the meeting and is the same Zoom account whose userId was used to
issue the OBF token.
The same OBF token / same authorized user joining from the web client
or the mobile app does not produce 4017 and the bot joins normally.
== Questions ==
-
Is there a known condition under which a participant who has joined
from the Zoom desktop app is not counted as the “authorized user”
for the purposes of OBF / Anonymous Join Enforcement, while the
same user joining from the web client or mobile app is counted? -
Does the authorized-user check for OBF tokens rely on a property
(signed-in account state, device pairing, SSO session, JWT app
association, etc.) that is reported differently by the desktop
client than by the web/mobile clients? -
For Meeting SDK Web 6.0.0 specifically, are there any fixed
issues in later 6.x patches that affect “Authorized user not in
meeting” detection? Should we upgrade? -
Are there workarounds other than asking end users to switch to
the browser client to join?
Thank you very much for your time.