Intégration Better Auth
Copiez une commande de configuration avec les étapes d'installation et la guide markdown complet pour ce plugin.
Présentation
Section intitulée “Présentation”Better Auth fonctionne bien avec @capgo/capacitor-social-login lorsque vous souhaitez une connexion native sur le dispositif mais souhaitez toujours que Better Auth crée et gère la session sur votre serveur.
Cette page se concentre sur les deux modèles d'intégration qui s'intègrent le mieux :
- Passage de jeton natif pour Google, Apple et Facebook
- Authentification OAuth générique de Better Auth pour les fournisseurs comme Auth0, Okta, Keycloak et serveurs OIDC personnalisés
Quel modèle utiliser
Section intitulée “Quel modèle utiliser”Utiliser le passage de jeton natif
Section intitulée “Utiliser le passage de jeton natif”Utiliser SocialLogin.login() d'abord, puis envoyez ensuite le jeton retourné à Better Auth avec authClient.signIn.social() lorsque vous utilisez :
- Apple
Utilisez une authentification générique OAuth
Section intitulée “Utilisez une authentification générique OAuth”Laissez Better Auth gérer la redirection OAuth complète lors de l'utilisation de :
- Auth0
- Okta
- Keycloak
- GitHub
- OneLogin
- Tout fournisseur OAuth2 ou OIDC personnalisé
Cela garde l'échange de session du côté Better Auth et évite de dupliquer la logique de redirection entre deux systèmes.
Configuration du serveur d'authentification améliorée
Section intitulée « Configuration du serveur d'authentification améliorée »Commencez par configurer Better Auth avec les fournisseurs sociaux que vous souhaitez supporter :
import { betterAuth } from 'better-auth';
export const auth = betterAuth({ baseURL: process.env.BETTER_AUTH_URL, socialProviders: { google: { clientId: process.env.GOOGLE_CLIENT_ID as string, clientSecret: process.env.GOOGLE_CLIENT_SECRET as string, }, apple: { clientId: process.env.APPLE_CLIENT_ID as string, clientSecret: process.env.APPLE_CLIENT_SECRET as string, appBundleIdentifier: process.env.APPLE_APP_BUNDLE_IDENTIFIER as string, }, facebook: { clientId: process.env.FACEBOOK_CLIENT_ID as string, clientSecret: process.env.FACEBOOK_CLIENT_SECRET as string, }, }, trustedOrigins: ['https://appleid.apple.com'],});Configuration du client d'authentification améliorée
Section intitulée « Configuration du client d'authentification améliorée »import { createAuthClient } from 'better-auth/client';
export const authClient = createAuthClient({ baseURL: 'https://auth.example.com',});Si vous utilisez React, utilisez le package client Better Auth React que votre application utilise déjà. Le modèle de transfert de jetons reste le même.
Exemple de Google
Section intitulée “Exemple de Google”Cette est la voie d'intégration la plus propre pour le signe d'entrée mobile natif Google :
import { SocialLogin } from '@capgo/capacitor-social-login';import { authClient } from '@/lib/auth-client';
const googleResult = await SocialLogin.login({ provider: 'google', options: { scopes: ['profile', 'email'], },});
if (googleResult.result.responseType !== 'online' || !googleResult.result.idToken) { throw new Error('Google online mode with idToken is required for Better Auth.');}
await authClient.signIn.social({ provider: 'google', idToken: { token: googleResult.result.idToken, accessToken: googleResult.result.accessToken?.token, }, callbackURL: '/dashboard',});Exemple d'Apple
Section intitulée “Exemple d'Apple”Pour Apple, passez le même nonce à la fois à la demande de connexion native et à Better Auth :
import { SocialLogin } from '@capgo/capacitor-social-login';import { authClient } from '@/lib/auth-client';
const nonce = crypto.randomUUID();
const appleResult = await SocialLogin.login({ provider: 'apple', options: { scopes: ['email', 'name'], nonce, },});
if (!appleResult.result.idToken) { throw new Error('Apple idToken is required for Better Auth.');}
await authClient.signIn.social({ provider: 'apple', idToken: { token: appleResult.result.idToken, nonce, accessToken: appleResult.result.accessToken?.token, }, callbackURL: '/dashboard',});Exemple de Facebook
Section intitulée “Exemple de Facebook”Better Auth documente deux modes de transfert Facebook :
- iOS Limited Login : passez le
idToken - Flux d'access-token : passez l'access token à la fois
tokenetaccessToken
Cela fonctionne avec la forme de réponse de @capgo/capacitor-social-login:
import { SocialLogin } from '@capgo/capacitor-social-login';import { authClient } from '@/lib/auth-client';
const facebookResult = await SocialLogin.login({ provider: 'facebook', options: { permissions: ['email', 'public_profile'], },});
const betterAuthToken = facebookResult.result.idToken ? { token: facebookResult.result.idToken, } : facebookResult.result.accessToken?.token ? { token: facebookResult.result.accessToken.token, accessToken: facebookResult.result.accessToken.token, } : null;
if (!betterAuthToken) { throw new Error('Facebook idToken or access token is required for Better Auth.');}
await authClient.signIn.social({ provider: 'facebook', idToken: betterAuthToken, callbackURL: '/dashboard',});Fournisseurs OAuth génériques avec Better Auth
Section intitulée “Fournisseurs OAuth génériques avec Better Auth”Pour Auth0, Okta, Keycloak, GitHub, Microsoft Entra ID et fournisseurs similaires, le plugin OAuth générique de Better Auth est généralement le meilleur choix plutôt que de passer des jetons à partir de SocialLogin.login({ provider: 'oauth2' }).
Serveur Better Auth
Section intitulée “Serveur Better Auth”import { betterAuth } from 'better-auth';import { genericOAuth } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ { providerId: 'keycloak', discoveryUrl: 'https://sso.example.com/realms/mobile/.well-known/openid-configuration', clientId: process.env.KEYCLOAK_CLIENT_ID as string, clientSecret: process.env.KEYCLOAK_CLIENT_SECRET as string, }, ], }), ],});Client Better Auth
Section intitulée “Client Better Auth”import { createAuthClient } from 'better-auth/client';import { genericOAuthClient } from 'better-auth/client/plugins';
export const authClient = createAuthClient({ baseURL: 'https://auth.example.com', plugins: [genericOAuthClient()],});
await authClient.signIn.oauth2({ providerId: 'keycloak', callbackURL: '/dashboard',});Exemples de fournisseur pour Better Auth Generic OAuth
Section intitulée « Exemples de fournisseur pour Better Auth Generic OAuth »Better Auth embarque des assistants de configuration préconfigurés pour plusieurs fournisseurs. Ces assistants sont les plus proches de l'exemple de fournisseur supplémentaire que vous voyez dans les documents du plugin de connexion sociale.
import { betterAuth } from 'better-auth';import { auth0, genericOAuth } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ auth0({ providerId: 'auth0', domain: 'dev-example.eu.auth0.com', clientId: process.env.AUTH0_CLIENT_ID as string, clientSecret: process.env.AUTH0_CLIENT_SECRET as string, scopes: ['openid', 'profile', 'email', 'offline_access'], }), ], }), ],});await authClient.signIn.oauth2({ providerId: 'auth0', callbackURL: '/dashboard',});Microsoft Entra ID
Section intitulée « Microsoft Entra ID »import { betterAuth } from 'better-auth';import { genericOAuth, microsoftEntraId } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ microsoftEntraId({ providerId: 'entra', tenantId: 'common', clientId: process.env.AZURE_CLIENT_ID as string, clientSecret: process.env.AZURE_CLIENT_SECRET as string, scopes: ['openid', 'profile', 'email', 'User.Read'], }), ], }), ],});await authClient.signIn.oauth2({ providerId: 'entra', callbackURL: '/dashboard',});import { betterAuth } from 'better-auth';import { genericOAuth, okta } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ okta({ providerId: 'okta', issuer: 'https://dev-12345.okta.com/oauth2/default', clientId: process.env.OKTA_CLIENT_ID as string, clientSecret: process.env.OKTA_CLIENT_SECRET as string, scopes: ['openid', 'profile', 'email', 'offline_access'], }), ], }), ],});await authClient.signIn.oauth2({ providerId: 'okta', callbackURL: '/dashboard',});Keycloak
Section intitulée “Keycloak”import { betterAuth } from 'better-auth';import { genericOAuth, keycloak } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ keycloak({ providerId: 'keycloak', issuer: 'https://sso.example.com/realms/mobile', clientId: process.env.KEYCLOAK_CLIENT_ID as string, clientSecret: process.env.KEYCLOAK_CLIENT_SECRET as string, scopes: ['openid', 'profile', 'email', 'offline_access'], }), ], }), ],});await authClient.signIn.oauth2({ providerId: 'keycloak', callbackURL: '/dashboard',});GitHub avec une configuration OAuth générique manuelle
Section intitulée “GitHub avec une configuration OAuth générique manuelle”GitHub n'a pas d'assistant d'authentification Better, donc utilisez une configuration manuelle :
import { betterAuth } from 'better-auth';import { genericOAuth } from 'better-auth/plugins';
export const auth = betterAuth({ plugins: [ genericOAuth({ config: [ { providerId: 'github', clientId: process.env.GITHUB_CLIENT_ID as string, clientSecret: process.env.GITHUB_CLIENT_SECRET as string, authorizationUrl: 'https://github.com/login/oauth/authorize', tokenUrl: 'https://github.com/login/oauth/access_token', userInfoUrl: 'https://api.github.com/user', scopes: ['read:user', 'user:email'], pkce: true, }, ], }), ],});await authClient.signIn.oauth2({ providerId: 'github', callbackURL: '/dashboard',});Remarques et avertissements
Section intitulée « Remarques et avertissements »-
Utiliser le mode en ligne de Google Better Auth a besoin de
idToken, doncgoogle.mode: 'offline'n'est pas le bon choix pour ce flux de transfert de main. -
Réutiliser le nonce d'Apple La générez une fois, l'envoyez à la connexion native d'Apple, puis envoyez la même valeur à Better Auth.
-
Traitez Facebook différemment en fonction de la plateforme Le connexion limitée sur iOS vous donne un jeton d'ID. D'autres flux peuvent ne vous donner qu'un jeton d'accès.
-
N'associez pas les flux OAuth génériques à moins d'avoir une raison Si Better Auth possède la configuration du fournisseur OAuth, laissez Better Auth gérer également le flux de redirection.
Lecture complémentaire
Section intitulée « Lecture complémentaire »- Documents du fournisseur Google OAuth de Better Auth
- Documents du fournisseur Apple OAuth de Better Auth
- Documents du fournisseur Facebook OAuth de Better Auth
- Documents du plugin OAuth générique de Better Auth
- Fournisseurs OAuth2 et OIDC de connexion sociale
Continuez de l'intégration de Better Auth
Section intitulée « Continuez de l'intégration de Better Auth »Si vous utilisez Intégration de Better Auth pour planifier l'authentification et les flux de compte, connectez-le avec En utilisant @capgo/capacitor-login-social pour la capacité native dans En utilisant @capgo/capacitor-login-social, @capgo/capacitor-login-social pour le détail d'implémentation dans @capgo/capacitor-login-social, @capgo/capacitor-passkey pour le détail d'implémentation dans @capgo/capacitor-passkey, @capgo/capacitor-biométrique-native pour le détail d'implémentation dans @capgo/capacitor-biométrique-native, et Authentification à deux facteurs pour le détail d'implémentation dans Authentification à deux facteurs.