Integrasi Otorisasi yang Lebih Baik
Copas prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Ringkasan
Judul bagian “Ringkasan”Auth yang lebih baik bekerja dengan baik dengan @capgo/capacitor-social-login ketika Anda ingin sign-in asli di perangkat tetapi masih ingin Better Auth untuk membuat dan mengelola sesi di backend Anda.
Halaman ini berfokus pada dua pola integrasi yang paling sesuai:
- Pengalihan token asli untuk Google, Apple, dan Facebook
- Better Auth Generic OAuth untuk penyedia seperti Auth0, Okta, Keycloak, dan server OIDC kustom
Pola mana yang harus digunakan
Judul bagian “Pola mana yang harus digunakan”Gunakan pengalihan token asli
Judul bagian “Gunakan pengalihan token asli”Gunakan SocialLogin.login() terlebih dahulu, kemudian kirimkan token yang dikembalikan ke Better Auth dengan authClient.signIn.social() ketika Anda menggunakan:
- Apple
Gunakan Otorisasi Lebih Baik Generic OAuth
Judul Bagian “Gunakan Otorisasi Lebih Baik Generic OAuth”Biarkan Otorisasi Lebih Baik mengendalikan aliran redirect OAuth penuh ketika Anda menggunakan:
- Auth0
- Okta
- Keycloak
- GitHub
- OneLogin
- Otorisasi OAuth2 atau OIDC apa pun yang disesuaikan
Itu menjaga pertukaran sesi di sisi Otorisasi Lebih Baik dan menghindari duplikasi logika redirect antara dua sistem.
Pengaturan Server Autentikasi yang Lebih Baik
Judul Bagian “Pengaturan Server Autentikasi yang Lebih Baik”Mulai dengan mengonfigurasi Better Auth dengan penyedia sosial yang ingin Anda dukung:
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'],});Pengaturan Klien Autentikasi yang Lebih Baik
Judul Bagian “Pengaturan Klien Autentikasi yang Lebih Baik”import { createAuthClient } from 'better-auth/client';
export const authClient = createAuthClient({ baseURL: 'https://auth.example.com',});Jika Anda menggunakan React, gunakan paket klien Better Auth React yang digunakan oleh aplikasi Anda. Pola penyerahan token tetap sama.
Contoh Google
Judul Bagian “Contoh Google”Jalan integrasi paling bersih untuk Google sign-in native mobile:
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',});Contoh Apple
Judul Bagian “Contoh Apple”Untuk Apple, kirim nonce yang sama ke kedua permintaan login native dan 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',});Contoh Facebook
Judul Bagian “Contoh Facebook”Dokumen Better Auth dua mode handoff Facebook:
- iOS Limited Login: kirim
idToken - Aliran token akses: lewatkan token akses sebagai baik
tokendanaccessToken
Ini berfungsi dengan bentuk respons dari @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',});Pemasok OAuth umum dengan Better Auth
Judul bagian “Pemasok OAuth umum dengan Better Auth”Untuk Auth0, Okta, Keycloak, GitHub, Microsoft Entra ID, dan pemasok lainnya yang mirip, plugin OAuth umum Better Auth biasanya lebih cocok daripada melewati token dari SocialLogin.login({ provider: 'oauth2' }).
Server Better Auth
Judul bagian “Server 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, }, ], }), ],});Klien Better Auth
Judul bagian “Klien 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',});Contoh penyedia untuk Better Auth Generic OAuth
Judul bagian “Contoh penyedia untuk Better Auth Generic OAuth”Better Auth menyediakan bantuan yang sudah dikonfigurasi untuk beberapa penyedia. Ini adalah yang paling dekat dengan contoh penyedia tambahan yang Anda lihat di dokumen plugin login sosial.
Auth0
Judul bagian “Auth0”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
Judul bagian “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
Bagian berjudul “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 dengan konfigurasi OAuth Generic manual
Bagian berjudul “GitHub dengan konfigurasi OAuth Generic manual”GitHub tidak memiliki bantuan Autentikasi Lebih Baik pada halaman OAuth Generic, jadi gunakan konfigurasi manual:
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',});Catatan dan peringatan
Bagian berjudul “Catatan dan peringatan”-
Gunakan mode online Google Better Auth membutuhkan
idToken, jadigoogle.mode: 'offline'tidaklah pilihan yang tepat untuk alur handoff ini. -
Gunakan ulang nonce Apple Buatlah sekali, kirim ke login native Apple, kemudian kirim nilai yang sama ke Better Auth.
-
Tangani Facebook secara berbeda berdasarkan platform Login Terbatas di iOS memberikan Anda token ID. Aliran lain mungkin hanya memberikan token akses.
-
Jangan campur aduk aliran OAuth Generic kecuali Anda memiliki alasan Jika Better Auth mengelola konfigurasi penyedia OAuth, biarkan Better Auth mengelola aliran redirect juga.
Baca lebih lanjut
Bagian berjudul “Baca lebih lanjut”- Dokumen penyedia Google Better Auth
- Dokumen penyedia Apple Better Auth
- Dokumen penyedia Facebook Better Auth
- Dokumen plugin OAuth Generic Better Auth
- Penyedia Login Sosial OAuth2 dan OIDC
Lanjutkan dari Integrasi Better Auth
Bagian berjudul “Lanjutkan dari Integrasi Better Auth”Jika Anda menggunakan Integrasi Better Auth untuk merencanakan autentikasi dan alur akun, hubungkannya dengan Menggunakan @capgo/capacitor-login-sosial untuk kemampuan asli di Menggunakan @capgo/capacitor-login-sosial, @capgo/capacitor-login-sosial untuk detail implementasi di @capgo/capacitor-login-sosial, @capgo/capacitor-passkey untuk detail implementasi di @capgo/capacitor-passkey, @capgo/capacitor-biometrik-asli untuk detail implementasi di @capgo/capacitor-biometrik-asli, dan Autentikasi dua faktor untuk detail implementasi di Autentikasi dua faktor.