OAuth client library APIs for 50+ major OAuth 1.0a and 2.0 providers
—
OAuth 2.0 provider implementations for major social networks, cloud services, and enterprise identity providers. All OAuth 2.0 APIs extend DefaultApi20 and follow the singleton pattern.
Google OAuth 2.0 API with OpenID Connect support, device authorization flow, and token revocation.
public class GoogleApi20 extends DefaultApi20 {
public static GoogleApi20 instance();
public String getAccessTokenEndpoint(); // https://oauth2.googleapis.com/token
protected String getAuthorizationBaseUrl(); // https://accounts.google.com/o/oauth2/v2/auth
public String getRevokeTokenEndpoint(); // https://oauth2.googleapis.com/revoke
public String getDeviceAuthorizationEndpoint(); // https://oauth2.googleapis.com/device/code
public TokenExtractor<OAuth2AccessToken> getAccessTokenExtractor();
public DeviceAuthorizationJsonExtractor getDeviceAuthorizationExtractor();
}Usage Example:
OAuth20Service service = new ServiceBuilder("client_id")
.apiSecret("client_secret")
.callback("callback_url")
.defaultScope("openid profile email")
.build(GoogleApi20.instance());
String authUrl = service.getAuthorizationUrl();
// After user authorization...
OAuth2AccessToken token = service.getAccessToken("authorization_code");Facebook OAuth 2.0 API with custom version support and specialized service for app secret proof.
public class FacebookApi extends DefaultApi20 {
public static FacebookApi instance(); // Default version 3.2
public static FacebookApi customVersion(String version);
public String getAccessTokenEndpoint(); // https://graph.facebook.com/v{version}/oauth/access_token
protected String getAuthorizationBaseUrl(); // https://www.facebook.com/v{version}/dialog/oauth
public String getRefreshTokenEndpoint(); // Throws UnsupportedOperationException
public Verb getAccessTokenVerb(); // GET
public TokenExtractor<OAuth2AccessToken> getAccessTokenExtractor();
public ClientAuthentication getClientAuthentication();
public FacebookService createService(...); // Returns specialized service
}Usage Example:
// Default Facebook API (version 3.2)
OAuth20Service service = new ServiceBuilder("app_id")
.apiSecret("app_secret")
.callback("callback_url")
.build(FacebookApi.instance());
// Custom Facebook API version
OAuth20Service service = new ServiceBuilder("app_id")
.apiSecret("app_secret")
.callback("callback_url")
.build(FacebookApi.customVersion("15.0"));GitHub OAuth 2.0 API for GitHub application authentication.
public class GitHubApi extends DefaultApi20 {
public static GitHubApi instance();
public String getAccessTokenEndpoint(); // https://github.com/login/oauth/access_token
protected String getAuthorizationBaseUrl(); // https://github.com/login/oauth/authorize
public Verb getAccessTokenVerb(); // POST
public TokenExtractor<OAuth2AccessToken> getAccessTokenExtractor();
}LinkedIn OAuth 2.0 API for professional network integration.
public class LinkedInApi20 extends DefaultApi20 {
public static LinkedInApi20 instance();
public String getAccessTokenEndpoint(); // https://www.linkedin.com/oauth/v2/accessToken
protected String getAuthorizationBaseUrl(); // https://www.linkedin.com/oauth/v2/authorization
public ClientAuthentication getClientAuthentication();
}Microsoft Azure AD OAuth 2.0 APIs for enterprise authentication.
public class MicrosoftAzureActiveDirectory20Api extends BaseMicrosoftAzureActiveDirectoryApi {
public static MicrosoftAzureActiveDirectory20Api instance(); // Common tenant
public static MicrosoftAzureActiveDirectory20Api custom(String tenant); // Custom tenant
public String getAccessTokenEndpoint(); // https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
protected String getAuthorizationBaseUrl(); // https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
public ClientAuthentication getClientAuthentication();
public BearerSignature getBearerSignature();
}
public class MicrosoftAzureActiveDirectoryApi extends BaseMicrosoftAzureActiveDirectoryApi {
public static MicrosoftAzureActiveDirectoryApi instance(); // Common tenant
public static MicrosoftAzureActiveDirectoryApi customTenant(String tenant);
public static MicrosoftAzureActiveDirectoryApi customResource(String resource);
public static MicrosoftAzureActiveDirectoryApi custom(String tenant, String resource);
public String getAccessTokenEndpoint(); // https://login.microsoftonline.com/{tenant}/oauth2/token
protected String getAuthorizationBaseUrl(); // Dynamic with resource parameter
public BearerSignature getBearerSignature();
}Popular social media platform OAuth 2.0 APIs.
public class InstagramApi extends DefaultApi20 {
public static InstagramApi instance();
public String getAccessTokenEndpoint(); // https://api.instagram.com/oauth/access_token
protected String getAuthorizationBaseUrl(); // https://api.instagram.com/oauth/authorize
public Verb getAccessTokenVerb(); // POST
}
public class SlackApi extends DefaultApi20 {
public static SlackApi instance();
public String getAccessTokenEndpoint(); // https://slack.com/api/oauth.access
protected String getAuthorizationBaseUrl(); // https://slack.com/oauth/authorize
public Verb getAccessTokenVerb(); // POST
public TokenExtractor<OAuth2AccessToken> getAccessTokenExtractor();
}
public class DiscordApi extends DefaultApi20 {
public static DiscordApi instance();
public String getAccessTokenEndpoint(); // https://discord.com/api/oauth2/token
protected String getAuthorizationBaseUrl(); // https://discord.com/api/oauth2/authorize
public ClientAuthentication getClientAuthentication();
}
public class VkontakteApi extends DefaultApi20 {
public static VkontakteApi instance();
public String getAccessTokenEndpoint(); // https://oauth.vk.com/access_token
protected String getAuthorizationBaseUrl(); // https://oauth.vk.com/authorize
public TokenExtractor<OAuth2AccessToken> getAccessTokenExtractor();
}Cloud storage and file sharing service OAuth 2.0 APIs.
public class BoxApi20 extends DefaultApi20 {
public static BoxApi20 instance();
public String getAccessTokenEndpoint(); // https://api.box.com/oauth2/token
protected String getAuthorizationBaseUrl(); // https://account.box.com/api/oauth2/authorize
public ClientAuthentication getClientAuthentication();
}
public class DropboxApi extends DefaultApi20 {
public static DropboxApi instance();
public String getAccessTokenEndpoint(); // https://api.dropboxapi.com/oauth2/token
protected String getAuthorizationBaseUrl(); // https://www.dropbox.com/oauth2/authorize
public ClientAuthentication getClientAuthentication();
}
public class ImgurApi extends DefaultApi20 {
public static ImgurApi instance();
public String getAccessTokenEndpoint(); // https://api.imgur.com/oauth2/token
protected String getAuthorizationBaseUrl(); // https://api.imgur.com/oauth2/authorize
public ClientAuthentication getClientAuthentication();
}Enterprise and productivity platform OAuth 2.0 APIs.
public class SalesforceApi extends DefaultApi20 {
public static SalesforceApi instance(); // Production environment
public static SalesforceApi sandbox(); // Sandbox environment
public String getAccessTokenEndpoint(); // Dynamic based on production/sandbox
protected String getAuthorizationBaseUrl(); // Dynamic based on production/sandbox
public Verb getAccessTokenVerb(); // POST
public TokenExtractor<OAuth2AccessToken> getAccessTokenExtractor(); // Returns SalesforceToken
public ClientAuthentication getClientAuthentication();
// Static utility method for TLS configuration
public static void initTLSv11orUpper() throws NoSuchAlgorithmException, KeyManagementException, IOException;
}
public class Asana20Api extends DefaultApi20 {
public static Asana20Api instance();
public String getAccessTokenEndpoint(); // https://app.asana.com/-/oauth_token
protected String getAuthorizationBaseUrl(); // https://app.asana.com/-/oauth_authorize
public ClientAuthentication getClientAuthentication();
}
public class KeycloakApi extends DefaultApi20 {
public static KeycloakApi instance();
// Note: Requires configuration for specific Keycloak instance
}Health and fitness platform OAuth 2.0 APIs.
public class FitbitApi20 extends DefaultApi20 {
public static FitbitApi20 instance();
public String getAccessTokenEndpoint(); // https://api.fitbit.com/oauth2/token
protected String getAuthorizationBaseUrl(); // https://www.fitbit.com/oauth2/authorize
public ClientAuthentication getClientAuthentication();
public TokenExtractor<OAuth2AccessToken> getAccessTokenExtractor();
}
public class PolarAPI extends DefaultApi20 {
public static PolarAPI instance();
public String getAccessTokenEndpoint(); // https://polarremote.com/v2/oauth2/token
protected String getAuthorizationBaseUrl(); // https://flow.polar.com/oauth2/authorization
public ClientAuthentication getClientAuthentication();
public TokenExtractor<OAuth2AccessToken> getAccessTokenExtractor();
}Region-specific and specialized platform OAuth 2.0 APIs.
public class MailruApi extends DefaultApi20 {
public static MailruApi instance();
public String getAccessTokenEndpoint(); // https://oauth.mail.ru/token
protected String getAuthorizationBaseUrl(); // https://oauth.mail.ru/login
public ClientAuthentication getClientAuthentication();
}
public class OdnoklassnikiApi extends DefaultApi20 {
public static OdnoklassnikiApi instance();
public String getAccessTokenEndpoint(); // https://api.odnoklassniki.ru/oauth/token.do
protected String getAuthorizationBaseUrl(); // https://connect.ok.ru/oauth/authorize
public ClientAuthentication getClientAuthentication();
}
public class KakaoApi extends DefaultApi20 {
public static KakaoApi instance();
public String getAccessTokenEndpoint(); // https://kauth.kakao.com/oauth/token
protected String getAuthorizationBaseUrl(); // https://kauth.kakao.com/oauth/authorize
public ClientAuthentication getClientAuthentication();
}
public class NaverApi extends DefaultApi20 {
public static NaverApi instance();
public String getAccessTokenEndpoint(); // https://nid.naver.com/oauth2.0/token
protected String getAuthorizationBaseUrl(); // https://nid.naver.com/oauth2.0/authorize
public ClientAuthentication getClientAuthentication();
}All extend DefaultApi20 and use instance() singleton pattern:
Asana20Api - Asana project managementAutomaticAPI - Automatic car trackingBoxApi20 - Box cloud storageDataportenApi - Dataporten identity providerDiscordApi - Discord chat platformDoktornaraboteApi - Doktornarabote job platformDropboxApi - Dropbox cloud storageFacebookApi - Facebook social networkFitbitApi20 - Fitbit fitness trackingFoursquare2Api - Foursquare location servicesFrappeApi - Frappe frameworkFreelancerApi - Freelancer job platformGeniusApi - Genius lyrics platformGitHubApi - GitHub code hostingGoogleApi20 - Google servicesHHApi - HeadHunter job platformHiOrgServerApi20 - HiOrg emergency servicesImgurApi - Imgur image hostingInstagramApi - Instagram photo sharingKaixinApi20 - Kaixin social networkKakaoApi - Kakao Korean platformKeycloakApi - Keycloak identity managementLinkedInApi20 - LinkedIn professional networkLiveApi - Microsoft Live servicesMailruApi - Mail.ru Russian servicesMediaWikiApi - MediaWiki platformsMeetupApi20 - Meetup event platformMicrosoftAzureActiveDirectory20Api - Modern Azure ADMicrosoftAzureActiveDirectoryApi - Legacy Azure ADMisfitApi - Misfit fitness trackingNaverApi - Naver Korean servicesOdnoklassnikiApi - Odnoklassniki Russian social networkPinterestApi - Pinterest image platformPolarAPI - Polar fitness trackingPx500Api - 500px photography platformRenrenApi - Renren Chinese social networkSalesforceApi - Salesforce CRMSinaWeiboApi20 - Sina Weibo Chinese microblogSkyrockApi - Skyrock blogging platformSlackApi - Slack team communicationStackExchangeApi - Stack Exchange Q&A networkTheThingsNetworkV1StagingApi - IoT network (V1 staging)TheThingsNetworkV2PreviewApi - IoT network (V2 preview)TutByApi - Tut.by Belarusian portalUcozApi - uCoz website builderVkontakteApi - VKontakte Russian social networkWunderlistAPI - Wunderlist task managementXeroApi20 - Xero accounting softwareYahooApi20 - Yahoo services// 1. Create service
OAuth20Service service = new ServiceBuilder("client_id")
.apiSecret("client_secret")
.callback("http://localhost:8080/callback")
.defaultScope("read write")
.build(ProviderApi.instance());
// 2. Get authorization URL
String authUrl = service.getAuthorizationUrl();
// 3. Exchange code for token
OAuth2AccessToken token = service.getAccessToken("authorization_code");
// 4. Make authenticated requests
OAuthRequest request = new OAuthRequest(Verb.GET, "https://api.provider.com/user");
service.signRequest(token.getAccessToken(), request);
Response response = service.execute(request);// For providers that support token refresh
if (token.getRefreshToken() != null) {
OAuth2AccessToken newToken = service.refreshAccessToken(token.getRefreshToken());
}// Supported by GoogleApi20
DeviceAuthorization deviceAuth = service.getDeviceAuthorization();
System.out.println("Go to: " + deviceAuth.getVerificationUriComplete());
OAuth2AccessToken token = service.pollAccessToken(deviceAuth);Install with Tessl CLI
npx tessl i tessl/maven-com-github-scribejava--scribejava-apis