Provideri OAuth2 generici
Copia un prompt di configurazione con i passaggi di installazione e la guida markdown completa per questo plugin.
Introduzione
Sezione intitolata “Introduzione”Il plugin di accesso sociale Capgo include un motore OAuth2 e OpenID Connect integrato. Puoi utilizzarlo per connettere qualsiasi fornitore di identità basato su standard, compresi:
- GitHub
- Azure AD / Microsoft Entra ID
- Auth0
- Okta
- Keycloak
- Server OIDC o OAuth2 personalizzati
La configurazione è multi-provider di progetto. Puoi registrare più provider contemporaneamente e poi selezionare uno al momento del login con oauth2 Cosa ti serve providerId.
Sezione intitolata “Cosa ti serve”
Prima di configurare un provider, raccogli:Il tuo ID del client OAuth
- Un URL di reindirizzamento che corrisponde allo schema del tuo app o all'URL di callback web
- Un endpoint di autorizzazione
- Un endpoint di token per il flusso di autorizzazione __CAPGO_KEEP_0__ o un
- A token endpoint for authorization code flow, or an
issuerUrlGli ambiti che il tuo app necessita, come - Configurazione multi-provider
openid profile email
Configurazione multi-provider
Sezione intitolata “Configurazione di provider multipli”Usa SocialLogin.initialize() una sola volta durante l'avvio dell'applicazione e registra ogni provider di cui hai bisogno:
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', }, }, },});Scoperta OIDC e alias
Sezione intitolata “Scoperta OIDC e alias”Se il tuo provider espone un documento di scoperta OpenID Connect, issuerUrl è la configurazione più semplice:
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, }, },});Il plugin supporta anche gli alias OAuth e OIDC comuni:
clientIdcome alias diappIdauthorizationEndpointcome alias diauthorizationBaseUrltokenEndpointAs un alias diaccessTokenEndpointendSessionEndpointAs un alias dilogoutUrlscopesAs un alias discope
Disponibile inoltre:
additionalParametersper override richieste di autenticazioneadditionalTokenParametersper override di scambio di tokenadditionalResourceHeadersper intestazioni di endpoint di risorse personalizzateadditionalLogoutParametersepostLogoutRedirectUrlper flussi di logoutloginHint,prompt, eiosPrefersEphemeralSession
Preset compatibili con Auth Connect
Sottosezione intitolata “Preset compatibili con Auth Connect”If you are migrating from Ionic Auth Connect and want to keep the same provider names, use 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', }, },});Sono supportati i seguenti ID dei provider predefiniti:
auth0azurecognitooktaonelogin
If a provider needs custom endpoints, either override them in the preset or bypass presets and configure the provider directly in oauth2.
Opzioni di configurazione
Sottosezione intitolata “Opzioni di configurazione”| Opzione | Tipo | Richiesto | Descrizione |
|---|---|---|---|
appId / clientId | stringa | Sì | Identificatore del client OAuth2 |
issuerUrl | __CAPGO_KEEP_0__ | No | URL di base per la scoperta OIDC |
authorizationBaseUrl / authorizationEndpoint | __CAPGO_KEEP_0__ | Sì* | URL del endpoint di autorizzazione |
accessTokenEndpoint / tokenEndpoint | __CAPGO_KEEP_0__ | Sì* | URL del endpoint del token |
redirectUrl | __CAPGO_KEEP_0__ | Sì | URL di callback |
scope / scopes | string / string[] | No | Scopi richiesti |
pkceEnabled | boolean | No | Predefinito a true |
responseType | 'code' o 'token' | No | Predefinito a 'code' |
resourceUrl | string | No | Dati utente o endpoint risorsa |
logoutUrl / endSessionEndpoint | string | No | URL di logout o fine sessione |
postLogoutRedirectUrl | string | No | URL di reindirizzamento dopo logout |
additionalParameters | Record<string, string> | No | Parametri di richiesta di autenticazione aggiuntivi |
additionalTokenParameters | Record<string, string> | No | Parametri di richiesta di token aggiuntivi |
additionalResourceHeaders | Record<string, string> | No | Aggiunti intestazioni per resourceUrl |
additionalLogoutParameters | Record<string, string> | No | Aggiunti parametri di logout |
loginHint | stringa | No | Attenzione per additionalParameters.login_hint |
prompt | stringa | No | Attenzione per additionalParameters.prompt |
iosPrefersEphemeralSession | booleano | No | Preferisci una sessione di browser temporanea su iOS |
logsEnabled | boolean | No | Abilita logging di debug dettagliato |
authorizationBaseUrl e accessTokenEndpoint sono facoltative solo quando issuerUrl è sufficiente per la scoperta. I endpoint espliciti sempre prevalgono sui valori scoperti.
Utilizzo del login OAuth2
Sezione intitolata “Utilizzo del login OAuth2”const result = await SocialLogin.login({ provider: 'oauth2', options: { providerId: 'github', scope: 'read:user user:email', loginHint: 'user@example.com', },});Flusso di reindirizzamento su web
Sezione intitolata “Flusso di reindirizzamento su web”Usa flow: 'redirect' se desideri un reindirizzamento a pagina intera al posto di un popup:
await SocialLogin.login({ provider: 'oauth2', options: { providerId: 'auth0', flow: 'redirect', },});Nella pagina che riceve il callback, elabora il risultato di accesso:
const result = await SocialLogin.handleRedirectCallback();if (result?.provider === 'oauth2') { console.log(result.result.providerId);}Stato di accesso e logout
Sezione intitolata “Stato di accesso e logout”const status = await SocialLogin.isLoggedIn({ provider: 'oauth2', providerId: 'github',});
await SocialLogin.logout({ provider: 'oauth2', providerId: 'github',});Token di refresh
Sezione intitolata “Token di refresh”await SocialLogin.refresh({ provider: 'oauth2', options: { providerId: 'github', },});
const refreshed = await SocialLogin.refreshToken({ provider: 'oauth2', providerId: 'github', refreshToken: 'existing-refresh-token',});refresh() utilizza il token di aggiornamento memorizzato dal plugin. refreshToken() ti consente di passare un token di aggiornamento da te e di restituire la risposta OAuth2 fresca.
Ottieni l'attuale token di accesso
Sottosezione intitolata “Ottieni l'attuale token di accesso”const code = await SocialLogin.getAuthorizationCode({ provider: 'oauth2', providerId: 'github',});
console.log(code.accessToken);Esempi specifici del provider
Sottosezione intitolata “Esempi specifici del provider”Esempio di GitHub
Sottosezione intitolata “Esempio di GitHub”Usa GitHub quando desideri un flusso di app OAuth semplice e dati di profilo 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);Esempio di Azure AD / Microsoft Entra ID
Esempio di Azure AD / Microsoft Entra IDUsa Azure quando hai bisogno di dati di Microsoft Graph, come il profilo utente:
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);Esempio di Auth0
Esempio di sezione titolata “Auth0 example”Auth0 è una buona scelta quando hai bisogno di OIDC più un pubblico personalizzato 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', },});Se utilizzi il flusso di reindirizzamento sul web, leggi il risultato sulla pagina di callback:
const auth0Result = await SocialLogin.handleRedirectCallback();if (auth0Result?.provider === 'oauth2') { console.log(auth0Result.result.idToken);}Esempio di Okta
Esempio di sezione titolata “Okta example”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);Esempio Keycloak
Sottosezione intitolata “Esempio Keycloak”Usa la scoperta quando il tuo provider pubblica /.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);Forma della risposta OAuth2
Sottosezione intitolata “Forma della risposta OAuth2”I login OAuth2 riusciti restituiscono:
| Campo | Descrizione |
|---|---|
providerId | La chiave del provider configurata utilizzata per l'accesso |
accessToken | Payload del token di accesso o null |
idToken | Token ID OIDC se il provider ne ha restituito uno |
refreshToken | Rinnova il token se i permessi richiesti lo consentivano |
resourceData | JSON raw recuperato da resourceUrl |
scope | Permessi concessi |
tokenType | Di solito bearer |
expiresIn | Durata del token in secondi |
Riferimento alla configurazione del provider
Sottosezione intitolata “Riferimento alla configurazione del provider”-
Creare un'app OAuth Apre GitHub Impostazioni dello sviluppatore e crea un nuovo App OAuth.
-
Imposta l'URL di chiamata Utilizza l'URL di reindirizzamento del tuo app, ad esempio
myapp://oauth/github. -
Configura il 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',},},});
Azure AD / Microsoft Entra ID
Sezione intitolata “Azure AD / Microsoft Entra ID”-
Registra un'app Vai al Portale Azure, apri
App registrations, e crea un registro di app nativa o mobile. -
Aggiungi l'URI di reindirizzamento Aggiungi un URI di reindirizzamento mobile o desktop che corrisponde all'URL di chiamata del tuo app.
-
Configura il 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',},},});
-
Crea un'applicazione nativa Apri il Dashboard Auth0 e crea un'applicazione nativa.
-
Imposta le URL di callback consentite Aggiungi l'URL di reindirizzamento esatto utilizzato dal tuo Capacitor app.
-
Configura il 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',},},});
-
Crea un'applicazione OIDC nativa In Console di amministrazione Okta, crea un'applicazione OIDC nativa.
-
Aggiungi il tuo URI di reindirizzamento Registra l'URL di callback esatto utilizzato dal tuo app.
-
Configura il 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',},},});
Keycloak e provider OIDC personalizzati
Sezione intitolata “Keycloak e provider OIDC personalizzati”Se il tuo provider supporta la scoperta di OpenID Connect, preferisci 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, }, },});Se la scoperta non è disponibile, configura manualmente gli endpoint di autorizzazione e token.
Note specifiche per piattaforma
Sezione intitolata “Note specifiche per piattaforma”- Il plugin utilizza
ASWebAuthenticationSession. - Imposta
iosPrefersEphemeralSession: truese desideri una sessione di navigazione privata senza cookie condivisi.
Android
Sezione intitolata “Android”- I redirect OAuth tornano attraverso il tuo schema e host dell'applicazione.
- Assicurati che l'URL di callback del provider corrisponda esattamente alla configurazione del collegamento profondo Android.
- Il plugin gestisce già l'attività OAuth. Aggiungi solo filtri di intent personalizzati se la tua app richiede un diverso modello di redirect.
- Il flusso di redirect è meglio quando il provider blocca i popup o le tue regole di autenticazione richiedono la navigazione a livello di finestra.
- Alcuni provider bloccano l'intercambio diretto di token con CORS. In questi casi, utilizza un'intercapedine di backend o una configurazione del provider che consente ai clienti pubblici.
- Pratiche di sicurezza migliori
Sezione intitolata “Pratiche di sicurezza migliori”
__CAPGO_KEEP_0__-
Usa PKCE Conserva
pkceEnabled: trueper i clienti pubblici. -
Preferisci il flusso di autenticazione code
responseType: 'code'è più sicuro del flusso implicito. -
Valuta i token sul tuo backend Decodifica e verifica l'emittente, l'audience, la scadenza e la firma server-side.
-
Memorizza i token di refresh in modo sicuro Per le app native, associa questo plugin con @capgo/capacitor-account-persistente.
-
Usa HTTPS in ogni caso I punti di accesso di autenticazione e di logout nella produzione dovrebbero sempre utilizzare HTTPS.
Risolvere i problemi
Sottosezione intitolata “Risolvere i problemi”providerId is required
Sottosezione intitolata “providerId è richiesto”Tutti i metodi OAuth2 richiedono la chiave del provider configurata:
await SocialLogin.login({ provider: 'oauth2', options: { providerId: 'github' },});OAuth2 provider "xxx" not configured
Sottosezione intitolata “Il provider OAuth2 "xxx" non è configurato”Chiamata SocialLogin.initialize() prima dell'accesso e assicurati che providerId corrisponda alla chiave dell'oggetto sotto oauth2.
Mancanza di URL di reindirizzamento
Sottosezione intitolata “Mancanza di URL di reindirizzamento”- Confronta l'URL di reindirizzamento configurato nel tuo'app e nel pannello del provider carattere per carattere.
- Attenti a slash finali, disaccordi di schema e host diversi.
- Assicurati di registrare i schemi di URL dell'app mobile prima di testare sul dispositivo.
Non è stato restituito alcun token di refresh.
Sottosezione intitolata “Non è stato restituito alcun token di refresh”.La maggior parte dei provider restituisce i token di refresh solo quando si richiedono ambiti come offline_access o si impone esplicitamente il consenso. Verifica la politica specifica del provider.
Debugging dell'interscambio di token
Sottosezione intitolata “Debugging dell'interscambio di token”.Abilita logsEnabled: true su la configurazione del provider per esaminare gli URL generati e i dettagli dell'interscambio di token.
Documentazione correlata
Sottosezione intitolata “Documentazione correlata”Continua con i Provider OAuth2 Generici
Sottosezione intitolata “Continua con i Provider OAuth2 Generici”Se stai utilizzando Provider OAuth2 Generici per pianificare l'autenticazione e le flussi di account, connettilo con Utilizza @capgo/capacitor-social-login per la capacità nativa in Utilizza @capgo/capacitor-social-login, @capgo/capacitor-social-login per il dettaglio di implementazione in @capgo/capacitor-social-login, @capgo/capacitor-passkey per i dettagli di implementazione in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric per i dettagli di implementazione in @capgo/capacitor-native-biometric, e Autenticazione a due fattori per i dettagli di implementazione in Autenticazione a due fattori.