Zum Inhalt springen

Allgemeine OAuth2-Anbieter

Das Capgo Social Login-Plugin enthält einen integrierten OAuth2- und OpenID-Connect-Motor. Sie können ihn verwenden, um mit jedem standardsbasierten Identitätsanbieter zu verbinden, einschließlich:

  • GitHub
  • Azure AD / Microsoft Entra ID
  • Auth0
  • Okta
  • Keycloak
  • Benutzerdefinierte OAuth2- oder OIDC-Server

Die oauth2 Die Konfiguration ist multi-Provider-geeignet. Sie können mehrere Anbieter gleichzeitig registrieren und dann bei der Anmeldung einen auswählen. providerId.

Bevor Sie einen Anbieter konfigurieren, sammeln Sie:

  • Ihren OAuth-Kunden-ID
  • Eine Umleitungs-URL, die Ihrem App-Schema oder Web-Callback-URL entspricht
  • Ein Autorisierungs-Endpunkt
  • Ein Token-Endpunkt für die Autorisierung code-Fluss, oder ein issuerUrl für OIDC-Entdeckung
  • Die von Ihrem Anwendungs benötigten Berechtigungen, wie openid profile email

Verwenden Sie SocialLogin.initialize() einmal während der Anwendungsstart und registrieren Sie jeden Anbieter, den Sie benötigen:

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

Wenn Ihr Anbieter ein OpenID Connect-Entdeckungs-Dokument ausgibt, issuerUrl ist die einfachste Konfiguration:

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

Der Plugin unterstützt auch gängige OAuth- und OIDC-Aliase:

  • clientId als Alias von appId
  • authorizationEndpoint als Alias von authorizationBaseUrl
  • tokenEndpoint als Alias von accessTokenEndpoint
  • endSessionEndpoint als Alias von logoutUrl
  • scopes als Alias von scope

Zusätzlich verfügbar:

  • additionalParameters für Auth-Anforderungs-Überschreibungen
  • additionalTokenParameters für Token-Austausch-Überschreibungen
  • additionalResourceHeaders für benutzerdefinierte Ressourcen-Endpunkt-Header
  • additionalLogoutParameters und postLogoutRedirectUrl für Abmeldeflows
  • loginHint, prompt, und iosPrefersEphemeralSession

Auth Connect-kompatible Vorlagen

Abschnitt: Auth Connect-kompatible Vorlagen

Wenn Sie von Ionic Auth Connect migrieren und die gleichen Anbieternamen beibehalten möchten, verwenden Sie 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',
},
},
});

Unterstützte Vorlagengeber-Provider-IDs:

  • auth0
  • azure
  • cognito
  • okta
  • onelogin

Wenn ein Anbieter benutzerdefinierte Endpunkte benötigt, können Sie entweder diese in der Vorlage überschreiben oder die Vorlagen umgehen und den Anbieter direkt in der oauth2.

Konfigurationsoptionen

Abschnitt: Konfigurationsoptionen
OptionTypPflichtfeldBeschreibung
appId / clientId__CAPGO_KEEP_0__JaOAuth2-Kundenidentifikator
issuerUrl__CAPGO_KEEP_0__NeinOIDC-Entdeckungs-Base-URL
authorizationBaseUrl / authorizationEndpoint__CAPGO_KEEP_0__Ja*Autorisierungsanforderungs-URL
accessTokenEndpoint / tokenEndpoint__CAPGO_KEEP_0__Nein*Token-Endpunkt-URL
redirectUrlZeichenfolgeJaCallback-URL
scope / scopesZeichenfolge / Zeichenfolge[]NeinAngeforderter Berechtigungen
pkceEnabledbooleanNeinStandardmäßig true
responseType'code' oder 'token'NeinStandardmäßig 'code'
resourceUrl__CAPGO_KEEP_0__NeinBenutzerinformationen oder Ressourcen-Endpunkt
logoutUrl / endSessionEndpoint__CAPGO_KEEP_0__NeinAbmelden oder Sitzungsende-URL
postLogoutRedirectUrl__CAPGO_KEEP_0__NeinUmleitungs-URL nach Abmeldung
additionalParametersRecord<string, string>NeinZusätzliche Auth-Request-Parameter
additionalTokenParametersRecord<string, string>Nein__CAPGO_KEEP_0__
additionalResourceHeadersRecord<string, string>Nein__CAPGO_KEEP_0__ für resourceUrl
additionalLogoutParametersRecord<string, string>Nein__CAPGO_KEEP_0__ für
loginHintZeichenketteNein__CAPGO_KEEP_0__ für additionalParameters.login_hint
prompt__CAPGO_KEEP_0__ für__CAPGO_KEEP_0__ für__CAPGO_KEEP_0__ additionalParameters.prompt
iosPrefersEphemeralSessionbooleanNeinPräferieren Sie eine ephemere Browser-Sitzung auf iOS
logsEnabledbooleanNeinAktivieren Sie ausführliche Debug-Protokollierung

authorizationBaseUrl und accessTokenEndpoint sind nur optional, wenn issuerUrl ist ausreichend für die Entdeckung. Explizite Endpunkte gewinnen immer über entdeckte Werte.

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

Verwenden Sie flow: 'redirect' wenn Sie eine vollständige Seite für die Umleitung statt eines Pop-ups möchten:

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

Auf der Seite, die den Callback erhält, den Anmeldeergebnis auswerten:

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() verwendet das von dem Plugin gespeicherte Aktualisierungstoken. refreshToken() lässt Sie ein Aktualisierungstoken selbst übergeben und gibt die frische OAuth2-Antwort zurück.

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

Benutze GitHub wenn du einen einfachen OAuth-App-Flow und grundlegende Profilinformationen benötigst:

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

Benutze Azure wenn du Microsoft-Graph-Daten wie das Benutzerprofil benötigst:

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 ist eine gute Wahl wenn du OIDC plus einen benutzerdefinierten API-Zielgruppe benötigst:

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

Wenn du auf Web den Redirect-Flow verwendest, lies die Ergebnisse auf der Callback-Seite zurück:

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

Verwende Entdeckung, wenn dein Anbieter veröffentlicht /.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);

Erfolgreiche OAuth2-Anmeldungen liefern:

FeldBeschreibung
providerIdDie konfigurierte Anbieter-Schlüssel, der für die Anmeldung verwendet wird
accessTokenZugriffs-Token-Payload oder null
idTokenOIDC-ID-Token, wenn der Anbieter eines zurückgegeben hat
refreshTokenRefresh-Token, wenn die angeforderten Berechtigungen es erlaubten
resourceDataRohes JSON, abgerufen von resourceUrl
scopeEingriffsberechtigungen
tokenTypeIn der Regel bearer
expiresInLebensdauer des Tokens in Sekunden
  1. Ein OAuth-Anwendung erstellen Öffnen GitHub Entwickler-Einstellungen und erstellen Sie eine neue OAuth-Anwendung.

  2. Die Rückruff-URL einstellen Verwenden Sie die Redirect-URL Ihrer App, zum Beispiel myapp://oauth/github.

  3. Die Plugin-Konfiguration

    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. Eine Anwendung registrieren Zum Azure-Portal gehen, öffnen App registrationsund erstelle eine native oder mobile App-Registrierung.

  2. Fügen Sie den Redirect-URI hinzu Fügen Sie einen mobilen oder Desktop-Redirect-URI hinzu, der sich an Ihre App-Callback-URL anpasst.

  3. Konfigurieren Sie das 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. Erstelle eine native Anwendung Öffnen Sie das Auth0-Dashboard und erstellen Sie eine Native-App.

  2. Setzen Sie die zulässigen Callback-URLs Fügen Sie die genaue Redirect-URL hinzu, die von Ihrer Capacitor-App verwendet wird.

  3. Konfigurieren Sie das 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. Erstellen Sie eine OIDC-Native-App In der Okta-Admin-Konsole erstellen Sie eine OIDC-Native-Anwendung.

  2. Fügen Sie Ihre Redirect-URI hinzu Registrieren Sie die genaue Callback-URL, die von Ihrer App verwendet wird.

  3. Konfigurieren Sie das 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',
    },
    },
    });

Wenn Ihr Anbieter OpenID Connect-Discovery unterstützt, bevorzugen Sie 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,
},
},
});

Wenn die Discovery nicht verfügbar ist, konfigurieren Sie die Autorisierungs- und Token-Endpunkte manuell.

  • The Plugin verwendet ASWebAuthenticationSession.
  • Setzen iosPrefersEphemeralSession: true Wenn Sie eine private Browser-Sitzung mit keinen geteilten Cookies möchten.
  • OAuth-Weiterleitungen kehren durch Ihre App-Scheme und -Host zurück.
  • Stellen Sie sicher, dass der Anbieter-Callback-URL genau Ihrem Android-Deep-Link-Einrichtung entspricht.
  • Der Plugin verarbeitet bereits die OAuth-Aktivität. Fügen Sie nur benutzerdefinierte Intent-Filter hinzu, wenn Ihre App ein anderes Redirect-Muster benötigt.
  • Der Pop-up-Flow ist der Standard und funktioniert gut für Einseitige Apps.
  • Der Redirect-Flow ist besser, wenn der Anbieter Pop-ups blockiert oder Ihre Auth-Regeln eine oberste Ebene Navigation erfordern.
  • Einige Anbieter blockieren direkte Browser-Token-Wechsel durch CORS. In solchen Fällen verwenden Sie einen Backend-Wechsel oder eine Anbieterkonfiguration, die öffentliche Clients zulässt.
  1. Verwenden Sie PKCE Behalten Sie pkceEnabled: true für öffentliche Clients.

  2. Die Autorisierung code-Fluss ist sicherer als der implizite Flow. responseType: 'code' Validieren Sie Token auf Ihrem Backend

  3. Entschlüsseln und überprüfen Sie den Aussteller, die Zielgruppe, die Ablaufzeit und die Signatur serverseitig. Speichern Sie Refresh-Tokens sicher

  4. Für native Apps, kombinieren Sie dieses Plugin mit Capacitor @capgo/capacitor-persistente-Konto.

  5. HTTPS überall verwenden Produktionsauth-Endpunkte und Logout-Endpunkte sollten immer HTTPS verwenden.

Jeder OAuth2-Methode benötigt die konfigurierte Provider-Schlüssel:

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

Aufrufen SocialLogin.initialize() vor der Anmeldung und stellen Sie sicher, dass der providerId sich mit dem Schlüssel unter dem Objekt übereinstimmt oauth2.

URL-Mismatch bei der Weiterleitung

Abschnitt: URL-Mismatch bei der Weiterleitung
  • Überprüfen Sie die im App- und Provider-Dashboard konfigurierte Weiterleitungs-URL Zeichen für Zeichen.
  • Achten Sie auf verbleibende Schrägstriche, Schemamismatches und unterschiedliche Hosts.
  • Stellen Sie sicher, dass die URL-Schemata der mobilen App vor der Testung auf einem Gerät registriert sind.

Kein Refresh-Token zurückgegeben

Abschnitt: Kein Refresh-Token zurückgegeben

Die meisten Anbieter liefern Refresh-Tokens nur dann zurück, wenn Sie Scopes wie __CAPGO_KEEP_0__ anfordern oder explizit die Zustimmung erzwingen. Überprüfen Sie die Anbieter-spezifische Richtlinie. offline_access Fehlende Token-Überprüfung

Abschnitt: Fehlende Token-Überprüfung

Aktivieren Sie die Token-Überprüfung

Abschnitt: Aktivieren Sie die Token-Überprüfung logsEnabled: true auf der Anbieterkonfiguration, um generierte URLs und Tokenaustauschdetails zu überprüfen.