Bessere Auth-Integration
Ein Einrichtungsvorschlag mit den Installationsanweisungen und der vollständigen Markdown-Guideline für diesen Plugin kopieren.
Übersicht
Abschnitt mit dem Titel „Übersicht“Better Auth funktioniert gut mit @capgo/capacitor-social-login wenn Sie eine nativere Anmeldung auf dem Gerät wollen, aber trotzdem möchten, dass Better Auth die Sitzung auf Ihrem Backend erstellt und verwaltet.
Diese Seite konzentriert sich auf die zwei Integrationsschemata, die am besten passen:
- Natives Token-Übertragung für Google, Apple und Facebook
- Better Auth Generic OAuth für Anbieter wie Auth0, Okta, Keycloak und benutzerdefinierte OIDC-Server
Welches Muster verwenden
Abschnitt: "Welches Muster verwenden"Verwenden Sie native Token-Handover
Abschnitt: "Verwenden Sie native Token-Handover"Verwenden Sie SocialLogin.login() Zuerst senden Sie das zurückgegebene Token an Better Auth mit authClient.signIn.social() wenn Sie verwenden:
- Apple
Verwenden Sie Better Auth Generic OAuth
Abschnitt: "Verwenden Sie Better Auth Generic OAuth"Lassen Sie Better Auth den gesamten OAuth-Redirect-Flow steuern, wenn Sie verwenden:
- Auth0
- Okta
- Keycloak
- GitHub
- OneLogin
- Jede beliebige benutzerdefinierte OAuth2- oder OIDC-Anbieter
Das hält den Sitzungs-Wechsel auf der Better Auth-Seite und vermeidet die Duplikation von Redirect-Logik zwischen zwei Systemen.
Better Auth-Server-Einrichtung
Abschnitt mit dem Titel ‘Better Auth-Server-Einrichtung’Beginnen Sie mit der Konfiguration von Better Auth mit den sozialen Anbietern, die Sie unterstützen möchten:
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'],});Better Auth-Kundenanlage
Abschnitt mit dem Titel „Better Auth-Kundenanlage“import { createAuthClient } from 'better-auth/client';
export const authClient = createAuthClient({ baseURL: 'https://auth.example.com',});Wenn Sie React verwenden, verwenden Sie das Better Auth-React-Kundenpaket, das Ihre App bereits verwendet. Der Token-Übergabepattern bleibt gleich.
Google-Beispiel
Abschnitt mit dem Titel „Google-Beispiel“Dies ist der sauberste Integrationsweg für nativen mobilen Google-Anmelden:
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',});Apple Beispiel
Abschnitt mit dem Titel “Apple Beispiel”Für Apple, übergeben Sie denselben Nonce sowohl für die native Anmeldeanfrage als auch für 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',});Facebook Beispiel
Abschnitt mit dem Titel “Facebook Beispiel”Better Auth dokumentiert zwei Facebook-Handover-Modi:
- iOS Limited Login: geben Sie den
idToken - Access-token-Fluss: geben Sie den Zugriffstoken als beide
tokenundaccessToken
Dies funktioniert mit der Antwortform von @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',});Standardmäßige OAuth-Anbieter mit Better Auth
Abschnitt: Standardmäßige OAuth-Anbieter mit Better AuthFür Auth0, Okta, Keycloak, GitHub, Microsoft Entra ID und ähnliche Anbieter ist der Generic OAuth-Plugin von Better Auth in der Regel besser geeignet als das Weitergeben von Token von SocialLogin.login({ provider: 'oauth2' }).
Better Auth-Server
Abschnitt: Better Auth-Serverimport { 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, }, ], }), ],});Better Auth-Klient
Abschnitt: Better Auth-Klientimport { 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',});Beispiele für Anbieter von Better Auth Generic OAuth
Abschnitt: Beispiele für Anbieter von Better Auth Generic OAuthBetter Auth liefert vor konfigurierte Hilfsfunktionen für mehrere Anbieter. Diese sind die nächste Annäherung an die zusätzlichen Beispiele, die Sie in den Dokumentationen der Social-Login-Plugin-Beispiele sehen.
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
Abschnitt mit dem Titel „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',});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 mit manueller Generic OAuth-Konfiguration
Abschnitt mit dem Titel “GitHub mit manueller Generic OAuth-Konfiguration”GitHub hat auf der Generic OAuth-Seite keinen Better Auth-Helfer, daher wird manuelle Konfiguration verwendet:
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',});Hinweise und Einschränkungen
Abschnitt mit dem Titel “Hinweise und Einschränkungen”-
Verwende Google-Online-Modus Bessere Auth benötigt das
idTokenalsogoogle.mode: 'offline'ist nicht das richtige Fit für diesen Handover-Flow. -
Wiederhole den Apple-Nonce Erstelle es einmal, sende es an Apple native Login, dann sende denselben Wert an Bessere Auth.
-
Behandle Facebook unterschiedlich je nach Plattform Limited Login auf iOS gibt dir einen ID-Token. Andere Flows geben dir möglicherweise nur ein Zugriffstoken.
-
Mische keine allgemeinen OAuth-Flows, es sei denn, du hast einen Grund dafür Wenn Bessere Auth die OAuth-Anbieter-Konfiguration besitzt, überlasse Bessere Auth auch den Redirect-Flow
Weitere Informationen
Abschnitt mit dem Titel „Weitere Informationen“- Dokumentation von Bessere Auth zum Google-Anbieter
- Bessere Auth Apple-Anbieter-Dokumentation
- Bessere Auth Facebook-Anbieter-Dokumentation
- Bessere Auth allgemeine OAuth-Plugin-Dokumentation
- Soziale Anmeldung OAuth2- und OIDC-Anbieter
Weitermachen von der Besseren Auth-Integration
Abschnitt mit dem Titel “Weitermachen von der Besseren Auth-Integration”Wenn Sie die Bessere Auth-Integration verwenden Bessere Auth-Integration um die Authentifizierung und die Kontenflüsse zu planen, verbinden Sie sie mit Mit @capgo/capacitor-soziale-anmeldung für die native Fähigkeit in Mit @capgo/capacitor-soziale-anmeldung, Mit @capgo/capacitor-soziale-anmeldung für die Implementierungsdetails in @capgo/capacitor-social-login, @capgo/capacitor-passkey für die Implementierungsdetails in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric für die Implementierungsdetails in @capgo/capacitor-native-biometric, und Zweifaktor-Authentifizierung für die Implementierungsdetails in Zweifaktor-Authentifizierung.