Overview
This guide explains how to authenticate users with their existing Discord accounts via OAuth2, enabling seamless login and access to Discord features.Flexible Account Options
If a player does not have a Discord account, you can use the SDK to create a provisional account instead so that they can still access your game’s features.Prerequisites
Before you begin, make sure you have:- Read the Core Concepts guide to understand:
- OAuth2 authentication flow
- Discord application setup
- SDK initialization
 
- Set up your development environment with:
- Discord application created in the Developer Portal
- Discord Social SDK downloaded and configured
- Basic SDK integration working (initialization and connection)
 
Our Authentication Flow
OAuth2 is the standard authentication flow that allows users to sign in using their Discord account. The process follows these steps:- Request authorization: Your game sends an authentication request to Discord.
- User Approval: The user approves the request, granting access to your application.
- Receive Authorization Code: After approval, Discord redirects the user to your app with an authorization code.
- Exchange for Tokens: The authorization code is exchanged for:
- Access Token, which is valid for ~7 days
- Refresh Token, used to obtain a new access token
 
The OAuth2 flow requires a user’s account to be verified
OAuth2 using the Discord Social SDK
- If the Discord client has overlay support (Windows only), the OAuth2 login modal appears in your game instead of opening a browser.
- The SDK automatically handles redirects, simplifying the authentication flow.
- Some security measures, such as CSRF protection, are built-in, but you should always follow best practices to secure your app.
Requesting Access Tokens
Step 0: Configure OAuth2 Redirects
For OAuth2 to work correctly, you must register the correct redirect URIs for your app in the Discord Developer Portal.| Platform | Redirect URI | 
|---|---|
| Desktop | http://127.0.0.1/callback | 
| Mobile | discord-APP_ID:/authorize/callback(replaceAPP_IDwith your Discord application ID) | 
Step 1: Request Authorization
The SDK provides helper methods to simplify OAuth2 login. Use theClient::Authorize method to initiate authorization and allow the user to approve access.
Authorization Scopes
One of the required arguments toClient::Authorize is scopes, which is the set of permissions that you are requesting. We recommend using Client::GetDefaultPresenceScopes, but you can choose whatever scopes you need.
Authorization Code Verifier
If you are usingClient::GetToken in Step 4, you will need to specify a “code challenge” and “code verifier” in your requests. We’ll spare you the boring details of how that works (woo… crypto), as we’ve made a simple function to create these for you, Client::CreateAuthorizationCodeVerifier, which you can use to generate the code challenge and verifier.
Step 2: User Approval
After callingClient::Authorize, the SDK will open a browser window, Discord client, or an in-game overlay to prompt the user to approve the request.
Step 3: Receiving the Authorization Code
Once the user approves the request from Step 2, Discord will redirect the user back to your app with an authorization code that you can use to exchange for an access token.Step 4: Exchanging the Authorization Code for an Access Token
Token Exchange for Public Clients
This method requires enabling Public Client for your app. Most games will not want to ship with this enabled. Learn more
Public Client in the Discord Developer Portal and use Client::GetToken to automatically exchange the authorization code for a token.
We will also need the code verifier used to generate the code challenge in Step 1.
Server-to-Server Get Token Exchange
If your application uses a backend server and does not havePublic Client enabled, you can manually exchange the authorization code for an access token using the Discord API.
Example Response
Working with Tokens
Once you’ve received your access token, you’ll want to set the token in the SDK. You can useClient::UpdateToken to do that. At this point, you’re authorized and ready to go! You’ll want to store the player’s access token and refresh tokens somewhere.
Please note that the access_token values do expire. You’ll need to use the refresh_token to refresh the player’s access token.
Refreshing Access Tokens
Access tokens expire after 7 days, requiring refresh tokens to get a new one.Refreshing Access Tokens for Public Clients
This method requires enabling Public Client for your app. Most games will not want to ship with this enabled. Learn more
Client::RefreshToken method.
Server-to-Server Token Refresh
If you’re handling authentication on your server, send an API request to refresh the token.Revoking Access Tokens
If a user wants to disconnect their Discord account or if a token is compromised, you can revoke access and refresh tokens.When any valid access or refresh token is revoked, all of your application’s access and refresh tokens for that user are immediately invalidated.
Revoking Access Tokens for Public Clients
This method requires enabling Public Client for your app. Most games will not want to ship with this enabled. Learn more
Client::RevokeToken method. This will invalidate all access and refresh tokens for the user and they cannot be used again.
Server-to-Server Token Revocation
If your application uses a backend server, you can revoke tokens by making an API request to Discord’s token revocation endpoint.Handling User Initiated Revocation
Users can unlink their account by removing access to your application on their DiscordUser Settings -> Authorized Apps page.
If you would like to be notified when a user unlinks this way, you can configure you application to listen for the APPLICATION_DEAUTHORIZED webhook event.
Otherwise, you will know that the user has unlinked because their access token and refresh token (if you have one) will be invalidated.
Next Steps
Now that you’ve successfully implemented account linking with Discord, you can integrate more social features into your game.Design: Signing In
Design guidelines for account linking and user authentication
Creating a Unified Friends List
Combine Discord and game friends into a single list for easy management.
Setting Rich Presence
Display game status and information to Discord friends.
#social-sdk-dev-help channel for support from the community.
If you encounter a bug while working with the Social SDK, please report it here:  https://dis.gd/social-sdk-bug-report
Change Log
| Date | Changes | 
|---|---|
| March 17, 2025 | initial release |