Zum Inhalt springen

Generic OAuth2-Anbieter

GitHub

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
  • Eine Autorisierungs-Endpunkt
  • Ein Token-Endpunkt für die Autorisierung code-Fluss oder einen OIDC-Discovery-Endpunkt issuerUrl What you need
  • Die von Ihrem Anwendungs benötigten Berechtigungen, wie openid profile email

Verwenden SocialLogin.initialize() einmal während der Anwendungsstart und registrieren Sie jeden Provider, 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 Provider ein OpenID-Connect-Entdeckungsdocument 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-Überwachungen
  • additionalTokenParameters für Token-Austausch-Überwachungen
  • additionalResourceHeaders für benutzerdefinierte Ressourcen-Endpunkt-Überschriften
  • additionalLogoutParameters und postLogoutRedirectUrl für Abmeldevorgänge
  • loginHint, promptund iosPrefersEphemeralSession

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-IDs:

  • auth0
  • azure
  • cognito
  • okta
  • onelogin

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

OptionTypPflichtfeldBeschreibung
appId / clientIdOAuth2-KlientenidentifikatorJaOAuth2-Klientenidentifikator
issuerUrlZeichenfolgeNeinOIDC-Entdeckungs-Base-URL
authorizationBaseUrl / authorizationEndpointZeichenfolgeJa*Autorisierungsanforderungs-URL
accessTokenEndpoint / tokenEndpointZeichenfolgeNein*Tokenanforderungs-URL
redirectUrlJaJaRückruf-URL
scope / scopesstring / string[]NeinGeforderte Berechtigungen
pkceEnabledbooleanNeinoder true
responseType'code' Nein 'token'Standardmäßigoder 'code'
resourceUrlDaten als StringNeinBenutzerinformationen oder Ressourcen-Endpunkt
logoutUrl / endSessionEndpointDaten als StringNeinAbmelde- oder Sitzungs-Endpunkt-URL
postLogoutRedirectUrlDaten als StringNeinZurücksetzen-URL nach Abmeldung
additionalParametersRecord<string, string>NeinZusätzliche Auth-Request-Parameter
additionalTokenParametersRecord<string, string>NeinZusätzliche Tokenanforderungsparameter
additionalResourceHeadersRecord<string, string>NeinZusätzliche Kopfzeilen für resourceUrl
additionalLogoutParametersRecord<string, string>NeinZusätzliche Abmeldeparameter
loginHintZeichenfolgeNeinKurzschluss für additionalParameters.login_hint
promptZeichenfolgeNeinKurzschluss für additionalParameters.prompt
iosPrefersEphemeralSessionBooleschNoiOS-Browser-Sitzung bevorzugen
logsEnabledbooleanNeinErweiterte Debug-Protokollierung aktivieren

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

Mit OAuth2-Login

Mit OAuth2-Login

Anmeldung

Anmeldung
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 einen vollständigen Seitenumleitungsfluss statt eines Pop-ups möchten:

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

Auf der Seite, die den Callback empfängt, analysieren Sie das Login-Ergebnis:

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() Sie können ein Aktualisierungstoken selbst übergeben und erhalten die frische OAuth2-Antwort.

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

Verwenden Sie GitHub wenn Sie einen einfachen OAuth-Anwendungsfluss und grundlegende Profildaten benötigen:

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

Verwenden Sie Azure, wenn Sie Microsoft-Graph-Daten wie das Benutzerprofil benötigen:

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 Sie OIDC plus eine benutzerdefinierte API Zielgruppe benötigen:

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 Sie den Redirect-Flow auf der Web-Seite verwenden, lesen Sie 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);

Verwenden Sie die Entdeckung, wenn Ihr 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
providerIdDer konfigurierte Anbieter-Schlüssel, der für die Anmeldung verwendet wird
accessTokenZugriffs-Token-Payload oder null
idTokenOIDC-ID-Token, wenn der Provider eins zurückgegeben hat
refreshTokenRefresh-Token, wenn die angeforderten Berechtigungen es erlaubten
resourceDataRohes JSON aus resourceUrl
scopeErlaubte Berechtigungen
tokenTypeNormalerweise bearer
expiresInGültigkeitsdauer des Tokens in Sekunden
  1. Erstellen Sie ein OAuth-Anwendungsprogramm Öffnen GitHub Entwickler-Einstellungen und erstellen Sie ein neues OAuth-App.

  2. Setzen Sie die Callback-URL Verwenden Sie die Redirect-URL Ihrer App, zum Beispiel myapp://oauth/github.

  3. Konfigurieren Sie das 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. Registrieren Sie eine App Gehen Sie zum Azure-Portal, öffnen Sie App registrations, und erstellen Sie eine native oder mobile App-Registrierung.

  2. Die Umleitungs-URI hinzufügen Fügen Sie eine mobile oder Desktop-Umleitungs-URI hinzu, die Ihren App-Callback-URL entspricht.

  3. Die Plugin-Konfiguration anpassen

    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. Eine native Anwendung erstellen Öffnen Sie das Auth0-Dashboard und einen Native-App erstellen.

  2. Erlaubte Callback-URLs festlegen Fügen Sie die genaue Redirect-URL ein, die Ihre Capacitor-App verwendet.

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

  2. Hinzufügen Ihrer Redirect-URI Registrieren Sie die genaue Callback-URL, die Ihre App verwendet.

  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 Discovery nicht verfügbar ist, konfigurieren Sie die Autorisierungs- und Token-Endpunkte manuell.

  • Das Plugin verwendet ASWebAuthenticationSession.
  • Einstellung iosPrefersEphemeralSession: true Wenn Sie eine private Browser-Sitzung mit keiner gemeinsamen Cookie-Verwendung wünschen.
  • OAuth-Weiterleitungen kehren über Ihre App-Scheme und -Host zurück.
  • Stellen Sie sicher, dass der Anbieter-Callback-URL genau Ihren Android-Deep-Link-Einrichtungen entspricht.
  • Die Erweiterung handhabt bereits die OAuth-Aktivität. Fügen Sie nur benutzerdefinierte Intent-Filter hinzu, wenn Ihre App ein anderes Redirect-Muster benötigt.
  • Die Pop-up-Flussmethode ist die Standardmethode und funktioniert gut für Einseitige-Apps.
  • Die Redirect-Flussmethode ist besser, wenn der Anbieter Pop-ups blockiert oder Ihre Auth-Regeln eine oberste Ebene Navigation erfordern.
  • Einige Anbieter blockieren direkte Browser-Token-Austausch mit CORS. In solchen Fällen verwenden Sie einen Backend-Austausch oder eine Anbieter-Einstellung, die öffentliche Clients zulässt.
  1. Verwenden Sie PKCE Behalten Sie pkceEnabled: true für öffentliche Clients.

  2. Präferieren Sie die Autorisierungscode-Fluss responseType: 'code' ist sicherer als der implizite Fluss.

  3. Validieren Sie Token auf Ihrem Backend Entschlüsseln und überprüfen Sie Aussteller, Zielgruppe, Ablaufdatum und Signatur serverseitig.

  4. Speichern Sie Refresh-Tokens sicher Für native Apps, kombinieren Sie diesen Plugin mit @capgo/capacitor-persistent-account.

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

Jeder OAuth2-Methode ist die konfigurierte Anbieter-Schlüssel erforderlich:

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

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

Ursache für die Umleitung-URL-Mismatch

Abschnitt mit dem Titel „Umwleitung-URL-Mismatch“
  • Vergleichen Sie die konfigurierte Umleitung-URL in Ihrer App und im Anbieter-Dashboard Zeichen für Zeichen.
  • Achten Sie auf nachfolgende Schrägstriche, Schemamismatches und unterschiedliche Hosts.
  • Stellen Sie sicher, dass die URL-Schemata für mobile Apps vor der Testung auf einem Gerät registriert sind.

Die meisten Anbieter geben nur Refresh-Tokens aus, wenn Sie Scopes wie offline_access oder explizit die Zustimmung erzwingen. Überprüfen Sie die Anbieter-spezifische Richtlinie.

Aktivieren Sie logsEnabled: true im Anbieter-Konfiguration, um generierte URLs und Token-Austauschdetails zu überprüfen.

Weitermachen von Generic OAuth2-Anbietern

Abschnitt: Weitermachen von Generic OAuth2-Anbietern

Wenn Sie Social Login verwenden Generic OAuth2-Anbieter um die Authentifizierung und die Kontenflüsse zu planen, verbinden Sie es mit Verwenden Sie @capgo/capacitor-social-login für die native Fähigkeit in Verwenden Sie @capgo/capacitor-social-login @capgo/capacitor-social-login Für die Implementierungsdetails in @capgo/capacitor-social-login, @capgo/capacitor-passkey Für die Implementierungsdetails in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric Für die Implementierungsdetails in @capgo/capacitor-native-biometric und Zwei-Faktor-Authentifizierung Für die Implementierungsdetails in Zwei-Faktor-Authentifizierung.