# PKCE and Client Secrets

**URL:** https://devforum.zoom.us/t/pkce-and-client-secrets/133423
**Category:** API and Webhooks
**Tags:** pkce
**Created:** [May 30, 2025, 9:09pm UTC](https://devforum.zoom.us/t/pkce-and-client-secrets/133423 "2025-05-30T21:09:17Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![Dev110](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/dev110/32/69436_2.png) [@Dev110](https://devforum.zoom.us/u/Dev110)
#### Post date: [May 30, 2025, 9:09pm UTC](https://devforum.zoom.us/t/pkce-and-client-secrets/133423/1 "2025-05-30T21:09:17Z")

</div>

Using `zoom.us/oauth/authorize` and `zoom.us/oauth/token`

**Description**  
Simple question: Is there any way to use the PKCE flow to get an access token for a user, without having to use the client secret to create the `Authorization` header?

I’m working on a desktop app that will be distributed, and I don’t want to store the client secret if I can help it. LinkedIn’s auth flow can do this, and many online resources seem to suggest it should be possible. Some even suggest it’s the primary end of PKCE. [Authenticating with OAuth 2.0 for Native Clients - LinkedIn | Microsoft Learn](https://learn.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow-native)

If I’m barking up the wrong tree entirely, let me know. I’m definitely a newbie to OAuth and Zoom APIs in general.

Thanks in advance!

---

<div class="post-metadata">

### Author: ![expertswho](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/expertswho/32/60945_2.png) [@expertswho](https://devforum.zoom.us/u/expertswho)
#### Post date: [June 1, 2025, 10:44pm UTC](https://devforum.zoom.us/t/pkce-and-client-secrets/133423/2 "2025-06-01T22:44:55Z")

</div>

Hi @Dev110

Simple answer: NO.  
You must have a client ID and secret to authenticate through the marketplace and obtain a token in return. Without getting your token for authority, Zoom APIs are not going to talk to you.

If you are using a desktop app, I suggest you create a login service on another server to authorise the person and pass through the tokens.

However, it is not as simple as that, and there are different situations.

So what sort of interaction are you expecting from Zoom?  
What data will you be using?

---

<div class="post-metadata">

### Author: ![Dev110](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/dev110/32/69436_2.png) [@Dev110](https://devforum.zoom.us/u/Dev110)
#### Post date: [July 15, 2025, 3:51pm UTC](https://devforum.zoom.us/t/pkce-and-client-secrets/133423/3 "2025-07-15T15:51:50Z")

</div>

Hi @expertswho and thanks for the simple answer 🙂

We’re expecting users of our desktop app to authorize it to access their cloud recordings and some simple profile information. We followed the steps for User Authorization provided [here](https://developers.zoom.us/docs/integrations/oauth/). Being a desktop app, I think we’re technically considered a “public client” in OAuth 2.0 terms.

Maybe this should be an entirely different question, but our security team was surprised to see that Zoom requires a client secret regardless, and took that to mean that Zoom expects us to treat our app as a confidential client. I think if we could make Zoom require PKCE for auth, we’d end up just as secure as any other public client auth flow, but I don’t see anything indicating that’s possible. So we’d need to follow your login service suggestion, for example.

Are you or anyone at Zoom able to confirm whether we should operate under that assumption, or if Zoom has explicit expectations for how public clients ought to authorize/retrieve data on a user’s behalf?

---

<div class="post-metadata">

### Author: ![expertswho](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/expertswho/32/60945_2.png) [@expertswho](https://devforum.zoom.us/u/expertswho)
#### Post date: [July 22, 2025, 3:05pm UTC](https://devforum.zoom.us/t/pkce-and-client-secrets/133423/4 "2025-07-22T15:05:03Z")

</div>

hi @Dev110 ,

thanks firstly for your kind words.

OK, most of my apps run within ZOOM meeting SDK, the fact they are running in the meeting sdk means that they have authority from the connection by the marketplace to the user from within the zoom app. The scope of these calls refers to the meeting in which they are in and so no further need for identification.

What I call the 'SYSTEM api; (As I call it) are when you are doing a request to ZOOM Api server for data. This call can come from anywhere, zoom app, browser, external server. I can use these calls to in my apps. I can use them in my server-server apps.  
All those calls require the Oauth process and token to validate the user or admin being represented by the API call. Zoom has not context to these calls without the token. I think of it as a user and security token.

And for security of that token , it expires after an hour and you use the refresh token to get a new token and continue.

As a non zoom employee. I hope that exaplains it

John

---

<div class="post-metadata">

### Author: ![Dev110](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/dev110/32/69436_2.png) [@Dev110](https://devforum.zoom.us/u/Dev110)
#### Post date: [October 3, 2025, 6:18pm UTC](https://devforum.zoom.us/t/pkce-and-client-secrets/133423/5 "2025-10-03T18:18:25Z")

</div>

We ended up deciding to go the login service route.

Thanks again @expertswho. I’ll mark this as solved 🙂

---

<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: [October 4, 2025, 6:18pm UTC](https://devforum.zoom.us/t/pkce-and-client-secrets/133423/6 "2025-10-04T18:18:54Z")

</div>

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