Back

How to build a public Zendesk Sell integration: Building the Auth Flow

Aug 16, 20247 minute read

Hey there, fellow JavaScript enthusiast! Ready to dive into the world of Zendesk Sell integrations? Today, we're going to tackle one of the most crucial aspects of building a public integration: the authorization flow. Buckle up, because we're about to make your integration secure and user-friendly in no time!

Setting the Stage

Before we jump in, let's make sure we're on the same page. I'm assuming you've already got your Zendesk Sell account set up and you've registered your app. If not, go ahead and take care of that first. We'll wait. 😉

Also, make sure you've got your Node.js environment ready to roll. We're going to be writing some slick JavaScript code!

OAuth 2.0: Your New Best Friend

For our Zendesk Sell integration, we'll be using OAuth 2.0 with the Authorization Code Grant flow. It's like a secret handshake between your app and Zendesk, ensuring that only the cool kids (your authorized users) get in.

You'll need three key pieces of information from your registered Zendesk app:

  1. Client ID
  2. Client Secret
  3. Redirect URI

Keep these handy; we'll be using them soon!

Let's Build This Auth Flow!

Step 1: Kick Off the Auth Request

First things first, we need to send our users to Zendesk's authorization page. Here's how we do it:

const authUrl = `https://app.zendesk.com/oauth/authorizations/new?client_id=${clientId}&redirect_uri=${redirectUri}&response_type=code&scope=read%20write`; // Redirect the user to authUrl

This URL is your user's ticket to the auth party. When they hit this URL, they'll be asked to log in to Zendesk and approve your app's access.

Step 2: Handle the Callback

After the user approves your app, Zendesk will redirect them back to your redirect_uri with an authorization code. Time to exchange that code for some sweet, sweet tokens!

const axios = require('axios'); async function getTokens(code) { const response = await axios.post('https://app.zendesk.com/oauth/tokens', { grant_type: 'authorization_code', code, client_id: clientId, client_secret: clientSecret, redirect_uri: redirectUri, }); return response.data; }

This function will give you an access token and a refresh token. Treat these like gold!

Step 3: Token Management

Now that you've got your tokens, you need to store them securely. Never, ever store them in local storage or expose them to the client-side. A secure server-side storage solution is your best bet.

When it's time to use the access token, just include it in your API requests:

const response = await axios.get('https://api.getbase.com/v2/contacts', { headers: { 'Authorization': `Bearer ${accessToken}`, }, });

Don't forget to refresh your access token when it expires:

async function refreshAccessToken(refreshToken) { const response = await axios.post('https://app.zendesk.com/oauth/tokens', { grant_type: 'refresh_token', refresh_token: refreshToken, client_id: clientId, client_secret: clientSecret, }); return response.data; }

Handling the Curveballs

Of course, not everything always goes according to plan. Make sure you're prepared for:

  • Invalid tokens (hint: refresh or re-authenticate)
  • Users denying authorization (gracefully handle the error)
  • Network issues (retry with exponential backoff)

Keeping It Secure

Remember, with great power comes great responsibility. Always use HTTPS, store tokens securely, and only request the scopes you absolutely need. Your users are trusting you with their data, so don't let them down!

Take It for a Spin

Before you ship it, make sure to thoroughly test your auth flow. Try it out manually, and consider setting up some automated tests to catch any sneaky bugs.

You Did It!

And there you have it! You've just built a rock-solid authorization flow for your Zendesk Sell integration. Pat yourself on the back, you OAuth wizard, you!

Remember, this is just the beginning. Now that you've got the auth flow down, the sky's the limit for what you can do with the Zendesk Sell API. Go forth and integrate!

If you want to dive deeper, check out the Zendesk Sell API documentation and the OAuth 2.0 specification. Happy coding!