The JWT app type will be completely deprecated as of June 2023 (2024)

Problem/Motivation

JWT Deprecation - The JWT app type will be completely deprecated as of June 2023. New and current users will have 12 months to migrate their JWT based solutions to the server-to-server OAuth app type.

See https://marketplace.zoom.us/docs/guides/build/jwt-app/jwt-faq/

Currently this module relies on the JWT app type in Zoom. It looks like we'll need to migrate to the Create a Server-to-Server OAuth App

It probably makes sense to make this a 3.x version of this module since it will require users to at least reconfigure the module from at least an authentication standpoint. My hope is that there would be no change to other aspects of the module.

Roadmap for 3.0.x

  • Remove JWT Dependency
  • Add D10 Compatibility - Mostly complete. Ran through Drupalcheck and merged in automated fixes.
  • Add API Tools (apitools) to handle the config form & client.
  • Add support for Zoom's server to server Oauth
  • Update automated tests.
  • Add documentation for moving from 2.x to 3.x

Config Form Options Needed

These are options needed for Server to Server Oauth & Webhooks (aka Event Notifications).

  • Account ID
  • Client ID
  • Client secret
  • Event Secret Token

Comments

Comment #1

joelsteidl created an issue. See original summary.

The JWT app type will be completely deprecated as of June 2023 (1)

Comment #2

perfectcu.be CreditAttribution: perfectcu.be as a volunteer and commented

+1, Thanks!

The JWT app type will be completely deprecated as of June 2023 (2)

Comment #3

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

We've started a 3.0.x branch for this and hope to have a dev version up by the end of year.

The JWT app type will be completely deprecated as of June 2023 (3)

Comment #4

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

Issue summary: View changes

The JWT app type will be completely deprecated as of June 2023 (5)

Comment #6

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

Issue summary: View changes

The JWT app type will be completely deprecated as of June 2023 (6)

Comment #7

pixiekat

she/her

CreditAttribution: pixiekat commented

Following; thanks - came here hoping there was already a roadmap as I require this for my project too!

The JWT app type will be completely deprecated as of June 2023 (7)

Comment #8

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

We are still working on 3.x, but I went ahead and released a 2.1.0 version that supports Drupal 10.

The JWT app type will be completely deprecated as of June 2023 (8)

Comment #9

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

This is a proof of concept (super rough) of how the client will need to be refactored.

https://gist.github.com/joelsteidl/fad398aab245b828a13a218e9640ad0a

Each request will need to include an access token as the Authorization header.

The JWT app type will be completely deprecated as of June 2023 (9)

Comment #10

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

We are targeting the end of March 2023 for this to be available.

The JWT app type will be completely deprecated as of June 2023 (10)

Comment #11

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

Issue summary: View changes

The JWT app type will be completely deprecated as of June 2023 (11)

Comment #12

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

The 3.x version is just about ready for testing. https://git.drupalcode.org/project/zoomapi/-/tree/3.0.x

I will be working on documentation for converting from 2.x to 3.x.

Zoom has also made a lot of changes with Webhook validation that will become default in October 2023, so a lot of that is part of 3.x as well.

The JWT app type will be completely deprecated as of June 2023 (12)

Comment #13

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

We have a dev release up for 3.x!

composer require 'drupal/zoomapi:3.0.x-dev@dev'

Please take a look at the 2.x to 3.x documentation and let us know if you have any immediate questions.

We'll continue to work towards a stable release closer to June.

The JWT app type will be completely deprecated as of June 2023 (13)

Comment #14

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

Issue summary: View changes
Status: Active » Needs review

The JWT app type will be completely deprecated as of June 2023 (14)

Comment #15

pixiekat

she/her

CreditAttribution: pixiekat commented

Thanks for all the work. For the record are post and deletes the same as post in such that it requires the json key in the options array?

The JWT app type will be completely deprecated as of June 2023 (15)

Comment #16

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

That should be the case. Guzzle will automatically format the JSON.

Let me know if that isn't the case.

The JWT app type will be completely deprecated as of June 2023 (16)

Comment #17

pixiekat

she/her

CreditAttribution: pixiekat commented

Doing some testing and that is the case, thanks! :)

The JWT app type will be completely deprecated as of June 2023 (17)

Comment #18

joelsteidl CreditAttribution: joelsteidl at Aten Design Group commented

@pixiekat Thanks so much for testing things out. I'm curious if you've had any issues so far.

The JWT app type will be completely deprecated as of June 2023 (18)

Comment #19

pixiekat

she/her

CreditAttribution: pixiekat commented

I did discover one issue, actually. I was trying to put to the Update meeting status endpoint using the put() method and I received an 400 response: Request Body should be a valid JSON

I'm passing the meeting ID as the path and ['action' => 'end'] as the $option. I can't figure out why it's happening when it was working previously.

I don't think I'm missing a scope as I already have view and manage all user recordings active.

The JWT app type will be completely deprecated as of June 2023 (19)

Comment #20

pixiekat

she/her

CreditAttribution: pixiekat commented

Oh, got it. It was a Guzzle configuration. For put() requests in Guzzle 6, you need to send ['json' => $data] as your $option. For form data, you would send ['form_params' => $data].

Might be helpful to include in the documentation (not meaning that as a demand or to be rude or anything; I just think other people might be interested so they don't have to hunt). :)

The JWT app type will be completely deprecated as of June 2023 (2024)

FAQs

Is JWT being deprecated? ›

Q: When will the JWT deprecation start? A: Zoom will disable the ability to create new JWT apps on June 1, 2023. The projected end-of-life for JWT apps will be September 1, 2023. New and current users have until September 1 to migrate their JWT-based solutions to the new server-to-server OAuth or OAuth app types.

What is JWT app in zoom? ›

All apps created for third-party usage must use our OAuth app type. A JWT app is a type of server-to-server authenticated app, which allows users as well as other apps to consume its services.

What is the replacement of JWT? ›

OAuth2, Passport, Spring Security, Auth0, and Keycloak are the most popular alternatives and competitors to JSON Web Token.

Is JWT still used? ›

You can definitely use JWT tokens securely, however, you should probably not implement them from scratch since it can become complicated to secure them extensively without going down a rabbit hole.

How do I remove JWT app from Zoom? ›

Only one JWT app can be created per master Zoom account, hence cannot be deleted and recreated.

Is it necessary to use JWT? ›

JWT can be used as an access token to prevent unwanted access to a protected resource. They're often used as Bearer tokens, which the API will decode and validate before sending a response.

Is JWT safe for authentication? ›

Information exchange: JWTs are a good way of securely transmitting information between parties because they can be signed, which means you can be certain that the senders are who they say they are. Additionally, the structure of a JWT allows you to verify that the content hasn't been tampered with.

How long will JWT last? ›

The JWT access token is only valid for a finite period of time. Using an expired JWT will cause operations to fail. As you saw above, we are told how long a token is valid through expires_in . This value is normally 1200 seconds or 20 minutes.

What is more secure than JWT? ›

Secure: Opaque tokens do not contain any user information, making them more secure than JWT tokens. Flexible: Opaque tokens can be customized to store additional user information in the authorization server, which can be retrieved by the resource server when needed.

What is the difference between JWT and token? ›

The main difference between JWTs and opaque tokens is that an unencrypted JWT can be interpreted by anybody that holds the token, whereas opaque tokens cannot. An unencrypted JWT consists of three parts: a header, a payload, and a signature.

Why JWTs are bad for authentication? ›

The biggest problem with JWTs is that the token will continue to work until it expires, and the server has no easy way to revoke it. This could be extremely dangerous in situations such as the following: Logout doesn't actually log you out of the system.

Does Google use JWT? ›

With some Google APIs, you can make authorized API calls using a signed JWT instead of using OAuth 2.0, which can save you a network request.

Does Amazon use JWT? ›

After a user logs in, an Amazon Cognito user pool returns a JWT. The JWT is a base64url-encoded JSON string ("claims") that contains information about the user. Amazon Cognito returns three tokens: the ID token, the access token, and the refresh token.

How do I disable JWT? ›

You should store the refresh tokens that you've given out in a table and when the user logs out, flag the token as revoked and then when you give a new access token out, verify that the refresh token hasn't been revoked.

How do I clear my JWT token from my browser? ›

simply follow these 4 bullet points:
  1. Set a reasonable expiration time on tokens.
  2. Delete the stored token from client-side upon log out.
  3. Have DB of no longer active tokens that still have some time to live.
  4. Query provided token against The Blacklist on every authorized request.
Apr 24, 2020

Can we revoke JWT? ›

JWT tokens cannot be revoked easily unless you check the token against an online database. However, one option that you can use with JWT is instead of storing active tokens in the database, the database can store revoked token instead.

Is JWT only for authentication? ›

Both API key and JWT are used for authentication and authorization, but they do it differently. Authentication allows the user or application to use one or more methods of the API. Authorization defines how they can use those methods.

Is JWT permanent? ›

The signed JWT acts effectively as a temporary user credential, that replaces the permanent credential wich is the username and password combination.

Is it safe to store email in JWT? ›

Yes, it is bad practice and a security problem.

Email addresses are PII (personally identifiable information). Like all other PII, email addresses should never be stored unencrypted at rest; doing so is inherently insecure.

Is JWT bad for authentication? ›

Read more to know how you can use JWT and learn the necessary best practices. One of the most used authentication standards in web applications is the JSON Web Token standard. It is mostly used for authentication, authorization, and information exchange. JSON Web tokens are made of three parts separated by dots (.)

What is the problem with JWT? ›

Security is binary—it is either secure or not. As a result, using JWT for user sessions is dangerous. The biggest problem with JWTs is that the token will continue to work until it expires, and the server has no easy way to revoke it.

Is there better security than JWT? ›

Secure: Opaque tokens do not contain any user information, making them more secure than JWT tokens. Flexible: Opaque tokens can be customized to store additional user information in the authorization server, which can be retrieved by the resource server when needed.

Should I use JWT for login? ›

JWT is used for AUTHORIZATION, not AUTHENTICATION. In authentication, we take in a username and password and make sure it's correct (logging in). In authorization, we make sure the user who is sending requests to your server is the same user who logged in during authentication.

Can someone steal my JWT token? ›

JWT tokens provide secure access to an authenticated user, and attackers are always looking for ways to steal these tokens and quickly gain access by impersonating a consumer.

Why does JWT expire? ›

Why is JWT token expiration important? A JWT token that never expires is dangerous if the token is stolen then someone can always access the user's data. Quoted from JWT RFC (RFC 7519): The “exp” (expiration time) claim identifies the expiration time on or after which the JWT MUST NOT be accepted for processing.

What causes JWT to expire? ›

jwt-expiration.md

Expiration only happens for web apps, not for native mobile apps, because native apps never expire. Revoking only happens when (1) uses click the logout button on the website or native Apps;(2) users reset their passwords; (3) users revoke their tokens explicitly in the administration panel.

What is the new JWT vulnerability? ›

JsonWebToken is an open-source project that aims to create web tokens. The vulnerability, tracked as CVE-2022-23529, allows attackers to bypass the verification of JWT tokens, potentially leading to remote code execution (RCE) on a server.

What is safer than JWT? ›

PASETO is more secure than JWT and offers a simpler implementation. As a result, many developer communities started accepting it as a better alternative to JWT. Now that you too know the advantages of using PASETO over JWT, what are you going to use for your next project ?

Can you trust a JWT? ›

Don't Trust All the Claims

Claims in a JWT represent pieces of information asserted by the authorization server. The token is usually signed, so its recipient can verify the signature and thus trust the values of the payload's claims. You should be wary, however, when dealing with some claims in the token's header.

Why is JWT better than API key? ›

The main difference between API Key auth and JWT token auth is that the JWT Token is self-contained - the information asserted by the token is in the token. Whereas with an API Key the asserted information is stored in an external system.

Top Articles
Latest Posts
Article information

Author: Fredrick Kertzmann

Last Updated:

Views: 6513

Rating: 4.6 / 5 (66 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Fredrick Kertzmann

Birthday: 2000-04-29

Address: Apt. 203 613 Huels Gateway, Ralphtown, LA 40204

Phone: +2135150832870

Job: Regional Design Producer

Hobby: Nordic skating, Lacemaking, Mountain biking, Rowing, Gardening, Water sports, role-playing games

Introduction: My name is Fredrick Kertzmann, I am a gleaming, encouraging, inexpensive, thankful, tender, quaint, precious person who loves writing and wants to share my knowledge and understanding with you.