Integrasi Autentikasi yang Lebih Baik
Salin prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Ringkasan
Bab berjudul “Ringkasan”Auth yang Lebih Baik berfungsi dengan baik ketika @capgo/capacitor-social-login Anda ingin sign-in asli di perangkat tetapi masih ingin Auth yang Lebih Baik untuk membuat dan mengelola sesi di backend Anda.
Halaman ini berfokus pada dua pola integrasi yang paling sesuai:
- Pindahan Token Asli untuk Google, Apple, dan Facebook
- Auth yang Lebih Baik OAuth Generic untuk penyedia seperti Auth0, Okta, Keycloak, dan server OIDC kustom
Pilih pola mana yang digunakan
Judul Bagian: Pilih Pola Mana yang DigunakanPakai pengiriman token asli
Judul Bagian: Pakai Pengiriman Token AsliPakai SocialLogin.login() Terlebih dahulu, kemudian kirimkan token yang dikembalikan ke Better Auth dengan authClient.signIn.social() ketika Anda menggunakan:
- Apple
Pakai OAuth Generic Better Auth
Judul Bagian: Pakai OAuth Generic Better AuthGunakan:
- Auth0
- Okta
- Keycloak
- GitHub
- OneLogin
- Otorisasi OAuth2 atau OIDC apa pun yang disesuaikan
Dengan menjaga pertukaran sesi di sisi Better Auth dan menghindari logika redirect duplikat antara dua sistem.
Pengaturan Server Better Auth
Judul bagian “Pengaturan Server Better Auth”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 Better Auth
Bagian berjudul “Pengaturan Klien Better Auth”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
Bagian berjudul “Contoh Google”Integrasi ini adalah jalur yang paling bersih untuk sign-in Google 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: Contoh AppleUntuk 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: Contoh FacebookDokumen Better Auth menjelaskan dua mode handoff Facebook:
- iOS Limited Login: kirimkan
idToken - Aliran token akses: kirimkan token akses sebagai
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',});Jasa Otentikasi Umum dengan Otentikasi Lebih Baik
Judul Bagian “Jasa Otentikasi Umum dengan Otentikasi Lebih Baik”Untuk Auth0, Okta, Keycloak, GitHub, Microsoft Entra ID, dan penyedia otentikasi lainnya yang mirip, plugin Otentikasi Umum Otentikasi Lebih Baik biasanya lebih cocok daripada melewati token dari SocialLogin.login({ provider: 'oauth2' }).
Server Otentikasi Lebih Baik
Judul Bagian “Server Otentikasi Lebih Baik”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, }, ], }), ],});Pengguna Otentikasi Lebih Baik
Judul Bagian “Pengguna Otentikasi Lebih Baik”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 Otentikasi Umum Otentikasi Lebih Baik
Judul Bagian “Contoh penyedia untuk Otentikasi Umum Otentikasi Lebih Baik”Otentikasi Lebih Baik menyediakan bantuan yang sudah dikonfigurasi secara default untuk beberapa penyedia. Ini adalah yang paling mirip dengan contoh penyedia tambahan yang Anda lihat di dokumen plugin social-login.
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
Bagian berjudul “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',});Bahasa Keycloak
Judul Bagian “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
Judul Bagian “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
Judul Bagian “Catatan dan peringatan”-
Gunakan mode online Google Perlu Better Auth memiliki
idToken, jadigoogle.mode: 'offline'tidak cocok untuk alur handoff ini. -
Gunakan ulang nonce Apple Generate saja, kirim ke login native Apple, kemudian kirim nilai yang sama ke Better Auth.
-
Handle 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 provider OAuth, biarkan Better Auth mengelola aliran redirect juga.
Baca lebih lanjut
Judul bagian “Baca lebih lanjut”- Referensi Better Auth untuk provider Google
- Dokumen Provider Otorisasi Apple yang Lebih Baik
- Dokumen Provider Otorisasi Facebook yang Lebih Baik
- Dokumen Plugin Otorisasi OAuth Generic yang Lebih Baik
- Pemasangan Login Sosial dengan Provider OAuth2 dan OIDC
Teruskan dari Integrasi yang Lebih Baik
Bagian berjudul “Teruskan dari Integrasi yang Lebih Baik”Jika Anda menggunakan Integrasi yang Lebih Baik untuk merencanakan aliran otorisasi dan akun, hubungkannya dengan Menggunakan @capgo/capacitor-social-login untuk kemampuan asli di Menggunakan @capgo/capacitor-social-login, Menggunakan @capgo/capacitor-social-login untuk detail implementasi di @capgo/capacitor-social-login, @capgo/capacitor-passkey untuk detail implementasi di @capgo/capacitor-passkey, @capgo/capacitor-native-biometric untuk detail implementasi di @capgo/capacitor-native-biometric, dan Autentikasi Dua Faktor untuk detail implementasi di Autentikasi Dua Faktor.