Saltar al contenido

Proveedores de OAuth2 genéricos

GitHub

El plugin de inicio de sesión social Capgo incluye un motor de OAuth2 y OpenID Connect integrado. Puede utilizarlo para conectarse a cualquier proveedor de identidad basado en estándares, incluyendo:

  • GitHub
  • Azure AD / Microsoft Entra ID
  • Auth0
  • Okta
  • Keycloak
  • Servidores de OAuth2 o OIDC personalizados

La configuración es multi-proveedor por diseño. Puede registrar varios proveedores a la vez y luego seleccionar uno en el momento del inicio de sesión con oauth2 ¿Qué necesitas providerId.

Sección titulada “¿Qué necesitas”

Antes de configurar un proveedor, recolecta:

Tu ID de cliente OAuth

  • Una URL de redirección que coincida con tu esquema de aplicación o URL de llamada web
  • Un punto de conexión de autorización
  • Un punto de conexión de token para el flujo de autorización __CAPGO_KEEP_0__, o un
  • A token endpoint for authorization code flow, or an issuerUrl Los ámbitos que necesita tu aplicación, como
  • Configuración multi-proveedor openid profile email

Usa SocialLogin.initialize() una vez durante el arranque de la aplicación y registra cada proveedor que necesites:

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',
},
},
},
});

Si tu proveedor expone un documento de descubrimiento de OpenID Connect, issuerUrl es la configuración más sencilla:

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,
},
},
});

El plugin también admite comunes alias de OAuth y OIDC:

  • clientId como alias de appId
  • authorizationEndpoint como alias de authorizationBaseUrl
  • tokenEndpoint como un alias de accessTokenEndpoint
  • endSessionEndpoint como un alias de logoutUrl
  • scopes como un alias de scope

También disponible:

  • additionalParameters para sobreescribir solicitudes de autenticación
  • additionalTokenParameters para sobreescribir intercambios de token
  • additionalResourceHeaders para encabezados de recursos personalizados
  • additionalLogoutParameters y postLogoutRedirectUrl para flujos de cierre de sesión
  • loginHint, prompty iosPrefersEphemeralSession

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',
},
},
});

IDs de proveedores de configuración predeterminados admitidos:

  • auth0
  • azure
  • cognito
  • okta
  • onelogin

If a provider needs custom endpoints, either override them in the preset or bypass presets and configure the provider directly in oauth2.

OpciónTipoRequeridoDescripción
appId / clientIdcadenaIdentificador de cliente OAuth2
issuerUrlstringNoURL base de descubrimiento OIDC
authorizationBaseUrl / authorizationEndpointstringSí*URL del punto de autorización
accessTokenEndpoint / tokenEndpointstringNo*URL del punto de token
redirectUrlstringSí*URL de llamada de respaldo
scope / scopescadena / cadena[]NoÁmbitos solicitados
pkceEnabledbooleanNoPredeterminado a true
responseType'code' o 'token'NoPredeterminado a 'code'
resourceUrlcadenaNoInformación del usuario o punto final de recurso
logoutUrl / endSessionEndpointstringNoURL de cierre de sesión o logout
postLogoutRedirectUrlstringNoURL de redirección después de logout
additionalParametersRecord<string, string>NoParámetros de solicitud de autenticación adicionales
additionalTokenParametersRecord<string, string>NoParámetros de solicitud de token adicionales
additionalResourceHeadersRecord<string, string>NoEncabezados adicionales para resourceUrl
additionalLogoutParametersRecord<string, string>NoParámetros de cierre adicionales
loginHintcadenaNoAtajo para additionalParameters.login_hint
promptcadenaNoAtajo para additionalParameters.prompt
iosPrefersEphemeralSessionbooleanoNoPreferir sesión de navegador temporal en iOS
logsEnabledbooleanNoHabilitar depuración de registro detallado

authorizationBaseUrl y accessTokenEndpoint son solo obligatorios cuando issuerUrl es suficiente para la descubierta. Los puntos finales explícitos siempre ganan sobre los valores descubiertos.

const result = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'github',
scope: 'read:user user:email',
loginHint: 'user@example.com',
},
});

Use flow: 'redirect' si deseas una redirección de página completa en lugar de un popup:

await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'auth0',
flow: 'redirect',
},
});

En la página que recibe la llamada de retorno, analiza el resultado de inicio de sesión:

const result = await SocialLogin.handleRedirectCallback();
if (result?.provider === 'oauth2') {
console.log(result.result.providerId);
}
const status = await SocialLogin.isLoggedIn({
provider: 'oauth2',
providerId: 'github',
});
await SocialLogin.logout({
provider: 'oauth2',
providerId: 'github',
});
await SocialLogin.refresh({
provider: 'oauth2',
options: {
providerId: 'github',
},
});
const refreshed = await SocialLogin.refreshToken({
provider: 'oauth2',
providerId: 'github',
refreshToken: 'existing-refresh-token',
});

refresh() usa el token de refresco almacenado por el plugin. refreshToken() te permite pasar un token de refresco tú mismo y devuelve la respuesta OAuth2 fresca.

const code = await SocialLogin.getAuthorizationCode({
provider: 'oauth2',
providerId: 'github',
});
console.log(code.accessToken);

Utiliza GitHub cuando deseas un flujo de aplicación OAuth simple y datos de perfil básicos:

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);

Utiliza Azure cuando necesites datos de Microsoft Graph, como el perfil del usuario:

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);

Auth0 es una buena opción cuando necesitas OIDC más un público personalizado 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',
},
});

Si utilizas flujo de redirección en web, lee el resultado en la página de llamada de vuelta:

const auth0Result = await SocialLogin.handleRedirectCallback();
if (auth0Result?.provider === 'oauth2') {
console.log(auth0Result.result.idToken);
}
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);

Usar descubrimiento cuando tu proveedor publique /.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);

Inicios de sesión OAuth2 exitosos devuelven:

CampoDescripción
providerIdLa clave del proveedor configurada utilizada para el inicio de sesión
accessTokenToken de acceso o null
idTokenToken de identidad OIDC si el proveedor devolvió uno
refreshTokenRefresque el token si los ámbitos solicitados lo permitieron
resourceDataJSON crudo recuperado de resourceUrl
scopeÁmbitos concedidos
tokenTypeNormalmente bearer
expiresInTiempo de vida del token en segundos

Referencia de configuración del proveedor

__CAPGO_KEEP_0__
  1. Abrir __CAPGO_KEEP_0__ Configuración del desarrollador de GitHub Configuración del desarrollador de y crea una nueva aplicación OAuth.

  2. Establecer la URL de llamada Utiliza la URL de redirección de tu aplicación, por ejemplo myapp://oauth/github.

  3. Configura el 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',
    },
    },
    });
  1. Registrar una aplicación Ir al Portal de Azure, abre App registrations, y crea una registro de aplicación nativa o móvil.

  2. Agregar la URI de redirección Agregar una URI de redirección móvil o de escritorio que coincida con la URL de llamada de tu aplicación.

  3. Configura el 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',
    },
    },
    });
  1. Crear una aplicación nativa Abre el Panel de control de Auth0 y crea una aplicación nativa.

  2. Establecer URLs de llamada permitidas Agregar la URL de redirección exacta utilizada por tu Capacitor app.

  3. Configurar el 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',
    },
    },
    });
  1. Crear una aplicación nativa OIDC En la Consola de Administración de Okta, crea una aplicación nativa OIDC.

  2. Agregar tu URI de redirección Registrar la URL de llamada exacta utilizada por tu app.

  3. Configurar el 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',
    },
    },
    });

Si su proveedor admite el descubrimiento de OpenID Connect, prefiere 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,
},
},
});

Si no está disponible el descubrimiento, configura los puntos de conexión de autorización y token manualmente.

  • El plugin utiliza ASWebAuthenticationSession.
  • Establecer iosPrefersEphemeralSession: true si deseas una sesión de navegador privada sin cookies compartidas.
  • Los redireccionamientos de OAuth regresan a través de su esquema de aplicación y host.
  • Asegúrese de que la URL de llamada del proveedor coincida exactamente con la configuración de enlace profundo de Android.
  • El plugin ya maneja la actividad de OAuth. Sólo agregue filtros de intención personalizados si su aplicación necesita un patrón de redirección diferente.
  • El flujo de popup es el predeterminado y funciona bien para aplicaciones de una sola página.
  • El flujo de redirección es mejor cuando el proveedor bloquea los popup o sus reglas de autenticación requieren navegación de nivel superior.
  • Algunos proveedores bloquean el intercambio de tokens directo con CORS en el navegador. En esos casos, utilice un intercambio de backend o una configuración del proveedor que permita clientes públicos.
  1. Use PKCE Mantén pkceEnabled: true para clientes públicos.

  2. Preferir el flujo de autorización code responseType: 'code' es más seguro que el flujo implícito.

  3. Valida tokens en tu servidor Descodifica y verifica emisor, audiencia, expiración y firma en el lado del servidor.

  4. Almacena tokens de refresco de manera segura Para aplicaciones nativas, paira este plugin con @capgo/capacitor-cuenta-persistent.

  5. Utiliza HTTPS en todas partes Los puntos de conexión de autenticación de producción y los puntos de conexión de cierre de sesión deben utilizar siempre HTTPS.

Cada método OAuth2 necesita la clave del proveedor configurada:

await SocialLogin.login({
provider: 'oauth2',
options: { providerId: 'github' },
});

Llamar SocialLogin.initialize() antes de iniciar sesión y asegurarse de que providerId coincida con la clave del objeto bajo oauth2.

  • Compare la URL de redirección configurada en tu aplicación y panel de control del proveedor caracter por caracter.
  • Ten en cuenta los slashes finales, coincidencias de esquema y diferentes hosts.
  • Asegúrese de que los esquemas de URL de la aplicación móvil estén registrados antes de realizar pruebas en el dispositivo.

La mayoría de los proveedores solo devuelven tokens de refresco cuando se solicitan ámbitos como __CAPGO_KEEP_0__ o se fuerza explícitamente el consentimiento. Revisar la política específica del proveedor. offline_access Depuración de intercambio de tokens

Sección titulada “Depuración de intercambio de tokens”

Habilitar

en la configuración del proveedor para inspeccionar las URL generadas y los detalles del intercambio de tokens. logsEnabled: true Documentación relacionada

Sigue adelante desde Proveedores de OAuth2 Genericos

Sección titulada “Sigue adelante desde Proveedores de OAuth2 Genericos”

Si estás utilizando Proveedores de OAuth2 Genericos para planificar la autenticación y los flujos de cuenta, conecta con Usando @capgo/capacitor-inicio-de-sesión-social para la capacidad nativa en Usando @capgo/capacitor-inicio-de-sesión-social, Usando @capgo/capacitor-inicio-de-sesión-social para el detalle de implementación en @capgo/capacitor-inicio-de-sesión-social, Usando @capgo/capacitor-clave-de-entrada para el detalle de implementación en @capgo/capacitor-passkey, @capgo/capacitor-native-biometric para el detalle de implementación en @capgo/capacitor-native-biometric, y Autenticación de dos factores para el detalle de implementación en Autenticación de dos factores.