Zum Inhalt springen

Allgemeine OAuth2-Anbieter

GitHub

Das Capgo-Plugin für soziale Anmeldungen enthält einen integrierten OAuth2- und OpenID-Connect-Motor. Sie können es verwenden, um mit jedem standardskonformen Identitätsanbieter zu verbinden, einschließlich:

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

The Konfiguration ist multi-provider durch Design. Sie können mehrere Anbieter gleichzeitig registrieren und dann einen auswählen, wenn Sie sich anmelden. oauth2 Was Sie benötigen providerId.

Bevor Sie eine Anbieter-Konfiguration vornehmen, sammeln Sie:

Ihren OAuth-Kunden-ID

Einen Redirect-URL, der Ihrem App-Schema oder Web-Callback-URL entspricht

  • Einen Autorisierungs-Endpunkt
  • Einen Token-Endpunkt für die Autorisierung __CAPGO_KEEP_0__-Fluss, oder einen
  • Für OIDC-Discovery
  • A token endpoint for authorization code flow, or an issuerUrl Multi-provider-Konfiguration
  • Was Sie benötigen openid profile email

Bevor Sie eine Anbieter-Konfiguration vornehmen, sammeln Sie:

Abschnitt mit dem Titel ‘Konfiguration mehrerer Anbieter’

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-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-Überschreibungen
  • additionalTokenParameters für Token-Austausch-Überschreibungen
  • additionalResourceHeaders für benutzerdefinierte Ressourcen-Endpunkte-Überschriften
  • additionalLogoutParameters und postLogoutRedirectUrl für Abmeldevorgänge
  • loginHint, prompt, und iosPrefersEphemeralSession

If Sie aus 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 voreingestellte Anbieter-IDs:

  • auth0
  • azure
  • cognito
  • okta
  • onelogin

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

OptionTypZwingendBeschreibung
appId / clientIdZeichenfolgeJaOAuth2 Client Identifier
issuerUrlstringNeinOIDC-Entdeckungs-Base-URL
authorizationBaseUrl / authorizationEndpointstringJa*Autorisierungs-Endpunkt-URL
accessTokenEndpoint / tokenEndpointstringNein*Token-Endpunkt-URL
redirectUrlstringJa*Rückruf-URL
scope / scopesstring / string[]NeinGeforderte Berechtigungen
pkceEnabledbooleanNeinStandardmäßig true
responseType'code' oder 'token'NeinStandardmäßig 'code'
resourceUrlstringNeinBenutzerinfo oder Ressourcenendpunkt
logoutUrl / endSessionEndpointZeichenfolgeNeinAbmelde- oder Sitzungsbeendungs-URL
postLogoutRedirectUrlZeichenfolgeNeinUmleitungs-URL nach Abmeldung
additionalParametersRecord<string, string>NeinZusätzliche Auth-Request-Parameter
additionalTokenParametersRecord<string, string>NeinZusätzliche Token-Request-Parameter
additionalResourceHeadersRecord<string, string>NeinZusätzliche Header für resourceUrl
additionalLogoutParametersRecord<string, string>NeinZusätzliche Logout-Parameter
loginHintZeichenketteNeinKurzschlüssel für additionalParameters.login_hint
promptZeichenketteNeinKurzschlüssel für additionalParameters.prompt
iosPrefersEphemeralSessionBooleschNeinPräferenz für eine vorübergehende Browser-Sitzung auf iOS
logsEnabledbooleanNeinAusführliche Debug-Protokollierung aktivieren

authorizationBaseUrl und accessTokenEndpoint sind nur optional, wenn issuerUrl Ist für die Entdeckung ausreichend. 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 flow: 'redirect' wenn Sie einen vollständigen Seiten-umleiten möchten, anstatt eines Pop-ups:

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 den von dem Plugin gespeicherten Refresh-Token. refreshToken() erlaubt Ihnen, einen Refresh-Token selbst zu übergeben und gibt die frische OAuth2-Antwort zurück.

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

Verwende 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 das Ergebnis 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 Entdeckung, wenn Ihr Anbieter eine veröffentlicht hat /.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
accessTokenZugriffstoken-Payload oder null
idTokenOIDC-ID-Token, wenn der Anbieter eines zurückgegeben hat
refreshTokenAktualisieren Sie den Token, wenn die angeforderten Berechtigungen dies zulassen
resourceDataRohes JSON abgerufen von resourceUrl
scopeGenehmigte Berechtigungen
tokenTypeNormalerweise bearer
expiresInToken-Laufzeit in Sekunden

Referenz für die Anbieterkonfiguration

__CAPGO_KEEP_0__

Abschnitt mit dem Titel „GitHub“

Section titled “GitHub”
  1. Öffnen __CAPGO_KEEP_0__ Entwickler-Einstellungen GitHub Developer Settings Einen neuen OAuth-App erstellen.

  2. Setze die Callback-URL Verwende die Redirect-URL deiner App, zum Beispiel myapp://oauth/github.

  3. Konfiguriere 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. Eine App registrieren Gehe zum Azure-Portal, öffne App registrations, und erstelle eine native oder mobile App-Registrierung.

  2. Füge den Redirect-URI hinzu Füge einen mobilen oder Desktop-Redirect-URI hinzu, der mit deiner App-Callback-URL übereinstimmt.

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

  2. Erlaubte Callback-URLs setzen Fügen Sie die genaue Umleitungs-URL ein, die von Ihrer Capacitor-Anwendung verwendet wird.

  3. Plugin konfigurieren

    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 einen OIDC-Native-Application erstellen.

  2. Hinzufügen Sie Ihre Umleitungs-URI Registrieren Sie die genaue Callback-URL, die von Ihrer Anwendung verwendet wird.

  3. Plugin konfigurieren

    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 und benutzerdefinierte OIDC-Anbieter

Abschnitt: Keycloak und benutzerdefinierte OIDC-Anbieter

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

Plattformspezifische Hinweise

Abschnitt: Plattformspezifische Hinweise
  • Der Plugin verwendet ASWebAuthenticationSession.
  • Set iosPrefersEphemeralSession: true Wenn Sie eine private Browser-Sitzung mit keinen geteilten Cookies möchten.
  • OAuth-Weiterleitungen kehren über Ihre App-Scheme und -Host zurück.
  • Stellen Sie sicher, dass die 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 Weiterleitungs-Muster benötigt.
  • Der Umleitungs-Flow ist besser, wenn der Anbieter Pop-ups blockiert oder Ihre Auth-Regeln eine oberste Navigations-Ebene erfordern.
  • Einige Anbieter blockieren direkte Browser-Token-Austausch mit CORS. In solchen Fällen verwenden Sie einen Backend-Austausch oder eine Anbieter-Einrichtung, die öffentliche Clients zulässt.
  • Sicherheitsbest Practices

Abschnitt mit dem Titel “Sicherheitsbest Practices”

__CAPGO_KEEP_0__
  1. Verwenden Sie PKCE Behalten Sie pkceEnabled: true für öffentliche Clients.

  2. Die Autorisierung code-Fluss ist sicherer als der implizite Fluss. 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 @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-persistent-account @capgo/capacitor-persistent-account.

  5. Produktionsauth-Endpunkte und Logout-Endpunkte sollten immer HTTPS verwenden. Prefer authorization __CAPGO_KEEP_0__ flow

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 es providerId sich mit dem Schlüssel unter oauth2.

  • Vergleichen Sie den konfigurierten Redirect-URL in Ihrer App und dem Anbieter-Dashboard Zeichen für Zeichen.
  • Achten Sie auf verbleibende Schrägstriche, Scheme-Missverhältnisse und unterschiedliche Hosts.
  • Stellen Sie sicher, dass die URL-Schemes der mobilen App vor der Testung auf einem Gerät registriert sind.

Die meisten Anbieter geben nur Refresh-Tokens zurück, wenn Sie Anforderungsskope wie __CAPGO_KEEP_0__ anfordern oder explizit die Zustimmung erzwingen. Überprüfen Sie die Anbieter-spezifische Richtlinie. offline_access Fehlersuche bei Token-Wechsel

Abschnitt mit dem Titel „Fehlersuche bei Token-Wechsel“

Aktivieren Sie

auf der Anbieter-Konfiguration, um generierte URLs und Token-Wechsel-Daten zu überprüfen. logsEnabled: true Zugehörige Dokumentation

__CAPGO_KEEP_0__

Wenn Sie " Generic OAuth2 Providern" zur Planung der Authentifizierung und Benutzerflüsse verwenden, verbinden Sie es mit Verwenden Sie @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-social-login für die native Fähigkeit in Verwenden Sie @capgo/capacitor-social-login, @capgo/capacitor-social-login für die Implementierungsdetail in @capgo/capacitor-social-login, @capgo/capacitor-passkey für die native Fähigkeit in @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.