Public Client Integration
Authentication for Public Clients
Section titled “Authentication for Public Clients”If you have Public Client enabled on your Discord app, you can use the following code to authenticate your players with the external provider directly from the client — no backend required. Before using this method, you must configure your identity provider in the Developer Portal.
// filepath: your_game/auth_manager.cpp
void AuthenticateUser(std::shared_ptr<discordpp::Client> client) {
// Get your external auth token (Steam, OIDC, etc.)
std::string externalToken = GetExternalAuthToken();
// Get provisional token from Discord
client->GetProvisionalToken(DISCORD_APPLICATION_ID,
discordpp::AuthenticationExternalAuthType::OIDC,
externalToken,
[client](discordpp::ClientResult result, std::string accessToken, std::string refreshToken, discordpp::AuthorizationTokenType tokenType, int32_t expiresIn, std::string scope) {
if (result.Successful()) {
std::cout << "🔓 Provisional token received! Establishing connection...\n";
client->UpdateToken(discordpp::AuthorizationTokenType::Bearer, accessToken, [client](discordpp::ClientResult result) {
client->Connect();
});
} else {
std::cerr << "❌ Provisional token request failed: " << result.Error() << std::endl;
}
});
}How the Flow Works
Section titled “How the Flow Works”Once authentication is complete, you can use the access token as you would a full Discord user's access token. See Managing Provisional Accounts for token refresh, storage, and display names.
Error Handling
Section titled “Error Handling”Common error codes and solutions when creating a provisional account:
| Code | Meaning | Solution |
|---|---|---|
| 530000 | Application not configured | Contact Discord support to enable provisional accounts for your application |
| 530001 | Expired ID token | Request a new token from your identity provider |
| 530004 | Token too old | Request a new token (tokens over 1 week old are rejected) |
| 530006 | Username generation failed | Retry the operation (temporary error) |
| 530007 | Invalid client secret | Verify or regenerate your client secret in the Developer Portal |
| 530010 | User account non-provisional | User already linked to Discord account - use standard OAuth2 flow |
If you are using OIDC, you may encounter more specific errors:
| Code | Meaning | Solution |
|---|---|---|
| 530002 | Invalid issuer | Verify the iss claim in your ID token exactly matches the issuer URL in your OIDC configuration |
| 530003 | Invalid audience | Verify the aud claim in your ID token includes the client ID in your OIDC configuration |
| 530008 | OIDC configuration not found | Verify your issuer URL is correct, accessible over HTTPS, and serves a valid discovery document without HTTP redirects |
| 530009 | OIDC JWKS not found | Verify your JWKS endpoint is accessible over HTTPS without HTTP redirects |
| 530020 | Invalid OIDC JWT token | Verify your ID token is properly signed and uses a supported algorithm |
| 530027 | Missing kid header |
Ensure your ID token includes a kid (Key ID) header in the JWT header identifying the signing key |
Next Steps
Section titled “Next Steps”Managing Provisional Accounts
Refresh access tokens and set display names.
Merging Accounts
Merge a provisional account into a full Discord account.
Unmerging Accounts
Sever the link between a Discord account and a provisional account.
Need help? Join the Discord Developers Server and share questions in the #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
Section titled “Change Log”| Date | Changes |
|---|---|
| July 14, 2026 | Split the provisional accounts guide into its own section |
| March 17, 2025 | Initial release |