Passer à la navigation principale

Fournisseurs OAuth2 génériques

GitHub

Le plugin de connexion sociale Capgo comprend un moteur OAuth2 et OpenID Connect intégré. Vous pouvez l'utiliser pour vous connecter à tout fournisseur d'identité conforme aux normes, notamment :

  • GitHub
  • Azure AD / Microsoft Entra ID
  • Auth0
  • Okta
  • Keycloak
  • Serveurs OAuth2 ou OIDC personnalisés

Le oauth2 La configuration est multi-fournisseur par conception. Vous pouvez enregistrer plusieurs fournisseurs à la fois et sélectionner ensuite un à l'heure du connexion avec providerId.

Avant de configurer un fournisseur, collectez :

  • Votre ID client OAuth
  • Une URL de redirection qui correspond à votre schéma d'application ou à l'URL de rappel web
  • Un point de terminaison d'autorisation
  • Un point de terminaison de jeton pour le flux d'autorisation code ou un point de terminaison pour la découverte OIDC issuerUrl for OIDC discovery
  • Les champs d'accès dont votre application a besoin, comme openid profile email

Utilisez SocialLogin.initialize() une seule fois lors du démarrage de l'application et enregistrez chaque fournisseur dont vous avez besoin :

import { SocialLogin } from '@capgo/capacitor-social-login';
await SocialLogin.initialize({
oauth2: {
github: {
appId: 'your-github-client-id',
authorizationBaseUrl: 'https://github.com/login/oauth/authorize',
accessTokenEndpoint: 'https://github.com/login/oauth/access_token',
redirectUrl: 'myapp://oauth/github',
scope: 'read:user user:email',
pkceEnabled: true,
resourceUrl: 'https://api.github.com/user',
},
azure: {
appId: 'your-azure-client-id',
authorizationBaseUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
accessTokenEndpoint: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
redirectUrl: 'myapp://oauth/azure',
scope: 'openid profile email User.Read',
pkceEnabled: true,
resourceUrl: 'https://graph.microsoft.com/v1.0/me',
},
auth0: {
issuerUrl: 'https://your-tenant.auth0.com',
appId: 'your-auth0-client-id',
redirectUrl: 'myapp://oauth/auth0',
scope: 'openid profile email offline_access',
pkceEnabled: true,
additionalParameters: {
audience: 'https://your-api.example.com',
},
},
},
});

Si votre fournisseur expose un document de découverte OpenID Connect, issuerUrl est le plus simple des paramètres :

await SocialLogin.initialize({
oauth2: {
keycloak: {
issuerUrl: 'https://sso.example.com/realms/mobile',
clientId: 'mobile-app',
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email offline_access',
pkceEnabled: true,
},
},
});

Le plugin prend également en charge les alias OAuth et OIDC courants :

  • clientId en tant que nom de code de appId
  • authorizationEndpoint en tant que nom de code de authorizationBaseUrl
  • tokenEndpoint en tant que nom de code de accessTokenEndpoint
  • endSessionEndpoint en tant que nom de code de logoutUrl
  • scopes en tant que nom de code de scope

Disponible également :

  • additionalParameters pour les surcharges de requête d'authentification
  • additionalTokenParameters pour les surcharges d'échange de jeton
  • additionalResourceHeaders pour les en-têtes d'endpoint de ressource personnalisés
  • additionalLogoutParameters et postLogoutRedirectUrl pour les flux de déconnexion
  • loginHint, promptet iosPrefersEphemeralSession

Si vous migrez de Ionic Auth Connect et que vous souhaitez conserver les mêmes noms de fournisseur, utilisez SocialLoginAuthConnect.

import { SocialLoginAuthConnect } from '@capgo/capacitor-social-login';
await SocialLoginAuthConnect.initialize({
authConnect: {
auth0: {
domain: 'https://your-tenant.auth0.com',
clientId: 'your-auth0-client-id',
redirectUrl: 'myapp://oauth/auth0',
audience: 'https://your-api.example.com',
},
azure: {
tenantId: 'common',
clientId: 'your-azure-client-id',
redirectUrl: 'myapp://oauth/azure',
},
okta: {
issuer: 'https://dev-12345.okta.com/oauth2/default',
clientId: 'your-okta-client-id',
redirectUrl: 'myapp://oauth/okta',
},
},
});

Identifiants de fournisseur pris en charge par les modèles :

  • auth0
  • azure
  • cognito
  • okta
  • onelogin

Si un fournisseur nécessite des points de terminaison personnalisés, vous pouvez soit les surcharger dans le modèle, soit les ignorer et configurer le fournisseur directement dans oauth2.

OptionTypeObligatoireDescription
appId / clientIdIdentifiant client OAuth2OuiIdentifiant client OAuth2
issuerUrlchaîne de caractèresNonURL de base de découverte OIDC
authorizationBaseUrl / authorizationEndpointchaîne de caractèresOui*URL du point de terminaison d'autorisation
accessTokenEndpoint / tokenEndpointchaîne de caractèresNon*URL du point de terminaison de jeton
redirectUrlOuiOuiAdresse de rappel
scope / scopeschaîne de caractères / chaîne de caractères[]NonScopes demandés
pkceEnabledbooléenNonPar défaut true
responseType'code' ou 'token'NonPar défaut 'code'
resourceUrlInformations de l'utilisateur ou point de terminaison de ressourcesNonPoint de terminaison de ressources OAuth2
logoutUrl / endSessionEndpointChaîne de caractèresNonURL de déconnexion ou fin de session
postLogoutRedirectUrlChaîne de caractèresNonURL de redirection après déconnexion
additionalParametersRecord<string, string>NonParamètres supplémentaires de requête d'authentification
additionalTokenParametersRecord<string, string>NonParamètres supplémentaires pour requête de jeton
additionalResourceHeadersRecord<string, string>NonEn-têtes supplémentaires pour resourceUrl
additionalLogoutParametersRecord<string, string>NonParamètres supplémentaires pour déconnexion
loginHintchaîneNonRaccourci pour additionalParameters.login_hint
promptchaîneNonRaccourci pour additionalParameters.prompt
iosPrefersEphemeralSessionbooléenNoPréférez une session de navigateur éphémère sur iOS
logsEnabledbooleanNoActiver la journalisation de débogage détaillée

authorizationBaseUrl et accessTokenEndpoint seuls les champs facultatifs sont optionnels lorsque issuerUrl est suffisant pour la découverte. Les points de terminaison explicites l'emportent toujours sur les valeurs découvertes.

Utilisation du login OAuth2

Utilisation du login OAuth2

Se connecter

Se connecter
const result = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'github',
scope: 'read:user user:email',
loginHint: 'user@example.com',
},
});

Flux de redirection sur le web

Flux de redirection sur le web

Utilisez flow: 'redirect' Si vous souhaitez une redirection de page complète au lieu d'une fenêtre contextuelle :

await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'auth0',
flow: 'redirect',
},
});

Sur la page qui reçoit l'appel de retour, analysez le résultat de connexion :

const result = await SocialLogin.handleRedirectCallback();
if (result?.provider === 'oauth2') {
console.log(result.result.providerId);
}

Statut de connexion et déconnexion

Copier dans le presse-papier
const status = await SocialLogin.isLoggedIn({
provider: 'oauth2',
providerId: 'github',
});
await SocialLogin.logout({
provider: 'oauth2',
providerId: 'github',
});
await SocialLogin.refresh({
provider: 'oauth2',
options: {
providerId: 'github',
},
});
const refreshed = await SocialLogin.refreshToken({
provider: 'oauth2',
providerId: 'github',
refreshToken: 'existing-refresh-token',
});

refresh() utilise le jeton de rafraîchissement stocké par l'extension. refreshToken() vous permet de passer un jeton de rafraîchissement vous-même et renvoie la réponse OAuth2 fraîche.

const code = await SocialLogin.getAuthorizationCode({
provider: 'oauth2',
providerId: 'github',
});
console.log(code.accessToken);

Utilisez GitHub lorsque vous souhaitez un flux d'application OAuth simple et des données de profil de base :

await SocialLogin.initialize({
oauth2: {
github: {
appId: 'your-github-client-id',
authorizationBaseUrl: 'https://github.com/login/oauth/authorize',
accessTokenEndpoint: 'https://github.com/login/oauth/access_token',
redirectUrl: 'myapp://oauth/github',
scope: 'read:user user:email',
pkceEnabled: true,
resourceUrl: 'https://api.github.com/user',
},
},
});
const githubResult = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'github',
},
});
console.log(githubResult.result.accessToken?.token);
console.log(githubResult.result.resourceData);

Utilisez Azure lorsque vous avez besoin de données Microsoft Graph, telles que le profil de l'utilisateur :

await SocialLogin.initialize({
oauth2: {
azure: {
appId: 'your-azure-client-id',
authorizationBaseUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
accessTokenEndpoint: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
redirectUrl: 'myapp://oauth/azure',
scope: 'openid profile email User.Read',
pkceEnabled: true,
resourceUrl: 'https://graph.microsoft.com/v1.0/me',
},
},
});
const azureResult = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'azure',
},
});
console.log(azureResult.result.idToken);
console.log(azureResult.result.resourceData);

Auth0 est un bon choix lorsque vous avez besoin d'OIDC plus d'un auditoire personnalisé API :

await SocialLogin.initialize({
oauth2: {
auth0: {
appId: 'your-auth0-client-id',
authorizationBaseUrl: 'https://your-tenant.auth0.com/authorize',
accessTokenEndpoint: 'https://your-tenant.auth0.com/oauth/token',
redirectUrl: 'myapp://oauth/auth0',
scope: 'openid profile email offline_access',
pkceEnabled: true,
additionalParameters: {
audience: 'https://your-api.example.com',
},
},
},
});
const auth0Result = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'auth0',
flow: 'redirect',
},
});

Si vous utilisez le flux de redirection sur le web, lisez le résultat à nouveau sur la page de rappel :

const auth0Result = await SocialLogin.handleRedirectCallback();
if (auth0Result?.provider === 'oauth2') {
console.log(auth0Result.result.idToken);
}

Exemple Okta

Exemple Okta
await SocialLogin.initialize({
oauth2: {
okta: {
appId: 'your-okta-client-id',
authorizationBaseUrl: 'https://your-domain.okta.com/oauth2/default/v1/authorize',
accessTokenEndpoint: 'https://your-domain.okta.com/oauth2/default/v1/token',
redirectUrl: 'myapp://oauth/okta',
scope: 'openid profile email offline_access',
pkceEnabled: true,
resourceUrl: 'https://your-domain.okta.com/oauth2/default/v1/userinfo',
},
},
});
const oktaResult = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'okta',
},
});
console.log(oktaResult.result.resourceData);

Utilisez la découverte lorsque votre fournisseur publie /.well-known/openid-configuration:

await SocialLogin.initialize({
oauth2: {
keycloak: {
issuerUrl: 'https://sso.example.com/realms/mobile',
clientId: 'mobile-app',
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email offline_access',
pkceEnabled: true,
},
},
});
const keycloakResult = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'keycloak',
},
});
console.log(keycloakResult.result.idToken);

Les logins OAuth2 réussis retournent :

ChampDescription
providerIdLa clé de fournisseur configurée utilisée pour la connexion
accessTokenCharge de l'acces token ou null
idTokenID token OIDC si le fournisseur en a retourné un
refreshTokenRefresh token si les scopes demandés le lui ont permis
resourceDataJSON brut récupéré de resourceUrl
scopeScopes concédés
tokenTypeGénéralement bearer
expiresInDurée de vie du jeton en secondes
  1. Créer une application OAuth Ouvrir GitHub Paramètres du développeur et créez une nouvelle application OAuth.

  2. Définissez l'URL de rappel Utilisez l'URL de redirection de votre application, par exemple myapp://oauth/github.

  3. Configurez le plugin

    await SocialLogin.initialize({
    oauth2: {
    github: {
    appId: 'your-github-client-id',
    authorizationBaseUrl: 'https://github.com/login/oauth/authorize',
    accessTokenEndpoint: 'https://github.com/login/oauth/access_token',
    redirectUrl: 'myapp://oauth/github',
    scope: 'read:user user:email',
    pkceEnabled: true,
    resourceUrl: 'https://api.github.com/user',
    },
    },
    });
  1. Inscrivez une application Allez sur le Portail Azure, ouvrez App registrationset créez une inscription d'application native ou mobile.

  2. Ajoutez l'URI de redirection Configurez une URI de redirection mobile ou de bureau qui correspond à l'URL de rappel de votre application.

  3. Configurez le plugin

    await SocialLogin.initialize({
    oauth2: {
    azure: {
    appId: 'your-azure-client-id',
    authorizationBaseUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
    accessTokenEndpoint: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
    redirectUrl: 'myapp://oauth/azure',
    scope: 'openid profile email User.Read',
    pkceEnabled: true,
    resourceUrl: 'https://graph.microsoft.com/v1.0/me',
    },
    },
    });
  1. Créez une application native Ouvrez le Auth0 Dashboard créez une application native.

  2. Définissez les URL de rappel autorisées Ajoutez l'URL de redirection exacte utilisée par votre application Capacitor.

  3. Configurez le plugin

    await SocialLogin.initialize({
    oauth2: {
    auth0: {
    appId: 'your-auth0-client-id',
    authorizationBaseUrl: 'https://your-tenant.auth0.com/authorize',
    accessTokenEndpoint: 'https://your-tenant.auth0.com/oauth/token',
    redirectUrl: 'myapp://oauth/auth0',
    scope: 'openid profile email offline_access',
    pkceEnabled: true,
    additionalParameters: {
    audience: 'https://your-api.example.com',
    },
    logoutUrl: 'https://your-tenant.auth0.com/v2/logout',
    },
    },
    });
  1. Créez une application native OIDC Dans le console d'administration Okta, créez une application Native OIDC.

  2. Ajoutez votre URI de rappel Enregistrez l'URL de rappel exacte utilisée par votre application.

  3. Configurez le plugin

    await SocialLogin.initialize({
    oauth2: {
    okta: {
    appId: 'your-okta-client-id',
    authorizationBaseUrl: 'https://your-domain.okta.com/oauth2/default/v1/authorize',
    accessTokenEndpoint: 'https://your-domain.okta.com/oauth2/default/v1/token',
    redirectUrl: 'myapp://oauth/okta',
    scope: 'openid profile email offline_access',
    pkceEnabled: true,
    resourceUrl: 'https://your-domain.okta.com/oauth2/default/v1/userinfo',
    },
    },
    });

Si votre fournisseur prend en charge la découverte OpenID Connect, préférez issuerUrl:

await SocialLogin.initialize({
oauth2: {
keycloak: {
issuerUrl: 'https://sso.example.com/realms/mobile',
clientId: 'mobile-app',
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email offline_access',
pkceEnabled: true,
},
},
});

Si la découverte n'est pas disponible, configurez les points de terminaison d'autorisation et de jeton manuellement.

  • Le plugin utilise ASWebAuthenticationSession.
  • Configurez iosPrefersEphemeralSession: true Si vous souhaitez une session de navigateur privée sans partage de cookies.
  • Les redirections OAuth retournent par votre schéma et votre hôte d'application.
  • Assurez-vous que l'URL de rappel du fournisseur correspond exactement à votre configuration de lien profond Android.
  • Le plugin gère déjà l'activité OAuth. Ajoutez uniquement des filtres d'intent personnalisés si votre application nécessite un modèle de redirection différent.
  • Le flux de popup est la valeur par défaut et fonctionne bien pour les applications monopage.
  • Le flux de redirection est préférable lorsque le fournisseur bloque les popup ou que vos règles d'autorisation nécessitent une navigation de niveau supérieur.
  • Certains fournisseurs bloquent l'échange de jeton de navigateur direct avec CORS. Dans ces cas, utilisez un échange de backend ou une configuration du fournisseur qui permet aux clients publics.
  1. Utilisez PKCE Conservation pkceEnabled: true pour les clients publics.

  2. Préférez le flux d'autorisation code responseType: 'code' est plus sûr que le flux implicite.

  3. Vérifiez les jetons sur votre serveur Décryptez et vérifiez l'émetteur, l'audience, la date d'expiration et la signature côté serveur.

  4. Stockez les jetons de rafraîchissement de manière sécurisée Pour les applications natives, associez ce plugin avec @capgo/capacitor-compte persistant.

  5. Utilisez HTTPS partout Les points de terminaison d'authentification de production et les points de terminaison de déconnexion doivent toujours utiliser HTTPS.

Tout méthode OAuth2 nécessite la clé de fournisseur configurée :

await SocialLogin.login({
provider: 'oauth2',
options: { providerId: 'github' },
});

Appeler SocialLogin.initialize() avant la connexion et assurez-vous que le providerId correspond à la clé de l'objet sous oauth2.

  • Comparez l'URL de redirection configurée dans votre application et le tableau de bord du fournisseur caractère par caractère.
  • Prenez en compte les slash finals, les incohérences de schéma et les hôtes différents.
  • Assurez-vous que les schémas d'URL des applications mobiles sont enregistrés avant de tester sur appareil.

La plupart des fournisseurs ne retournent des jetons de renouvellement que lorsque vous demandez des scopes comme offline_access ou que vous imposez explicitement le consentement. Vérifiez la politique spécifique du fournisseur.

Activer logsEnabled: true sur la configuration du fournisseur pour inspecter les URL générées et les détails de l'échange de jetons.

Continuez depuis les fournisseurs OAuth2 génériques

Titre de la section « Continuez depuis les fournisseurs OAuth2 génériques »

Si vous utilisez Fournisseurs OAuth2 génériques pour planifier l'authentification et les flux de compte, connectez-l’avec Utilisation de @capgo/capacitor-social-login pour la capacité native dans Utilisation de @capgo/capacitor-social-login, @capgo/capacitor-social-login pour les détails d'implémentation dans @capgo/capacitor-connexion-social, @capgo/capacitor-passkey pour les détails d'implémentation dans @capgo/capacitor-passkey, @capgo/capacitor-authentification-native-biometrique pour les détails d'implémentation dans @capgo/capacitor-authentification-native-biometrique, et Authentification à deux facteurs pour les détails d'implémentation dans Authentification à deux facteurs.