Zum Inhalt springen

Allgemeine 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 standardskonformen Identitätsanbieter zu verbinden, einschließlich:

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

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

Bevor Sie eine Anbieterkonfiguration vornehmen, 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 issuerUrl für OIDC-Discovery
  • Die Berechtigungen, die Ihre App benötigt, wie z.B. 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-Entdeckungsdocument offenlegt, 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 As Alias von accessTokenEndpoint
  • endSessionEndpoint As Alias von logoutUrl
  • scopes As Alias von scope

Auch verfügbar:

  • additionalParameters Für Auth-Anforderungs-Übernahmen
  • additionalTokenParameters Für Token-Austausch-Übernahmen
  • additionalResourceHeaders Für benutzerdefinierte Ressourcen-Endpunkt-Überschriften
  • additionalLogoutParameters und postLogoutRedirectUrl Für Abmeldevorgänge
  • loginHint, prompt, und 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 voreingestellte Anbieter-IDs:

  • auth0
  • azure
  • cognito
  • okta
  • onelogin

Wenn 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.

OptionTypErforderlichBeschreibung
appId / clientIdstringJaOAuth2 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'
resourceUrlstringNeinBenutzerinformationen oder Ressourcenendpunkt
logoutUrl / endSessionEndpointZeichenfolgeNeinAbmelden oder Sitzungsende-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
loginHintZeichenketteNeinKurzschluss für additionalParameters.login_hint
promptZeichenketteNeinKurzschluss für additionalParameters.prompt
iosPrefersEphemeralSessionBooleschNeinPräferenz für eine vorübergehende Browser-Sitzung auf iOS
logsEnabledbooleanNeinVerbose Debug-Logging aktivieren

authorizationBaseUrl und accessTokenEndpoint sind nur optional, wenn issuerUrl Ist für die Entdeckung ausreichend. Ausdrückliche 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' Sie möchten einen vollständigen Seiten-Redirect anstelle eines Pop-Ups:

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

Auf der Seite, die den Callback erhält, 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-App-Flow und grundlegende Profil-Daten 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 auf Web-Plattformen den Redirect-Flow verwenden, lesen Sie die Ergebnisse auf der Callback-Seite wieder:

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 sie 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
accessTokenZugriffstoken-Payload oder null
idTokenOIDC-ID-Token, wenn der Anbieter eins zurückgegeben hat
refreshTokenRefresh token wenn die angeforderten Berechtigungen es erlaubten
resourceDataRaw JSON abgerufen von resourceUrl
scopeErlaubte Berechtigungen
tokenTypeNormalerweise bearer
expiresInLaufzeit des Tokens in Sekunden

Referenz für die Anbieter-Einstellung

__CAPGO_KEEP_0__

Abschnitt mit dem Titel “GitHub”

Section titled “GitHub”
  1. Öffnen __CAPGO_KEEP_0__ Entwickler-Einstellungen GitHub und erstellen Sie eine neue OAuth-Anwendung.

  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. Fügen Sie die Redirect-URI hinzu Fügen Sie eine mobile oder Desktop-Redirect-URI hinzu, die Ihrer App-Callback-URL entspricht.

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

  2. Fügen Sie Ihre Umleitungs-URI hinzu Registrieren Sie die genaue Callback-URL, die von Ihrer Anwendung 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',
    },
    },
    });

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-Einstellungen entspricht.
  • Der Plugin bereits handhabt die OAuth-Aktivität. Fügen Sie nur benutzerdefinierte Intent-Filter hinzu, wenn Ihre App ein anderes Redirect-Muster benötigt.
  • Der Redirect-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-Einstellung, 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. Sichern Sie sich die Refresh-Tokens

  4. Für native Apps, pairn Sie diesen Plugin mit @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-persistent-account @capgo/capacitor-persistent-account.

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

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

  • Vergleichen Sie die konfigurierte 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 Refresh-Tokens nur zurück, wenn Sie Anforderungsskope wie __CAPGO_KEEP_0__ anfordern oder explizit das Einverständnis 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-Details zu überprüfen. logsEnabled: true Zugehörige Dokumentation

__CAPGO_KEEP_0__

Wenn Sie " Generic OAuth2 Providern" zur Planung der Authentifizierung und Benutzerkontoflows 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 Verwenden Sie @capgo/capacitor-social-login für die Implementierungsdetails in @capgo/capacitor-Passkey, @capgo/capacitor-native-biometrische für die Implementierungsdetails in @capgo/capacitor-native-biometrische, und Zweifaktor-Authentifizierung für die Implementierungsdetails in Zweifaktor-Authentifizierung.