Generic OAuth2-Anbieter
Kopiere eine Setup-Anleitung mit den Installationsanweisungen und der vollständigen Markdown-Guide für diesen Plugin.
Einführung
Abschnitt mit dem Titel „Einführung“Der 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
Die oauth2 Die Konfiguration ist multi-Provider-geeignet. Sie können mehrere Anbieter gleichzeitig registrieren und dann bei der Anmeldung einen auswählen. providerId.
Was Sie benötigen
Abschnitt mit dem Titel "Was Sie benötigen"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
issuerUrlWhat you need - Die von Ihrem Anwendungs benötigten Berechtigungen, wie
openid profile email
Multi-Provider-Konfiguration
Abschnitt mit dem Titel „Multi-Provider-Konfiguration“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', }, }, },});OIDC-Entdeckung und Aliase
Abschnitt mit dem Titel „OIDC-Entdeckung und Aliase“Wenn Ihr Provider 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:
clientIdals Alias vonappIdauthorizationEndpointals Alias vonauthorizationBaseUrltokenEndpointals Alias vonaccessTokenEndpointendSessionEndpointals Alias vonlogoutUrlscopesals Alias vonscope
Zusätzlich verfügbar:
additionalParametersfür Auth-Anforderungs-ÜberläufeadditionalTokenParametersfür Token-Austauschs-ÜberläufeadditionalResourceHeadersfür benutzerdefinierte Ressourcen-Endpunkt-HeaderadditionalLogoutParametersundpostLogoutRedirectUrlfür AbmeldevorgängeloginHint,prompt, undiosPrefersEphemeralSession
Auth Connect-kompatible Vorlagen
Abschnitt mit dem Titel “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 Vorlagenvorlieger-IDs:
auth0azurecognitooktaonelogin
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 oauth2.
Konfigurationsoptionen
Abschnitt mit dem Titel “Konfigurationsoptionen”| Option | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
appId / clientId | OAuth2-Klientenidentifikator | Ja | OAuth2-Klientenidentifikator |
issuerUrl | Zeichenfolge | Nein | OIDC-Entdeckungs-Base-URL |
authorizationBaseUrl / authorizationEndpoint | Zeichenfolge | Ja* | Autorisierungsanforderungs-URL |
accessTokenEndpoint / tokenEndpoint | Zeichenfolge | Nein* | Token-Anforderungs-URL |
redirectUrl | Ja | Ja | Rückruf-URL |
scope / scopes | string / string[] | Nein | Geforderte Berechtigungen |
pkceEnabled | boolean | Nein | Standardmäßig true |
responseType | 'code' oder 'token' | Nein | Standardmäßig 'code' |
resourceUrl | Daten als String | Nein | Benutzerinformationen oder Ressourcen-Endpunkt |
logoutUrl / endSessionEndpoint | Daten als String | Nein | Abmelde- oder Sitzungsbeendungs-URL |
postLogoutRedirectUrl | Daten als String | Nein | Zurücksetzungs-URL nach Abmeldung |
additionalParameters | Record<string, string> | Nein | Zusätzliche Auth-Request-Parameter |
additionalTokenParameters | Record<string, string> | Nein | Zusätzliche Tokenanforderungsparameter |
additionalResourceHeaders | Record<string, string> | Nein | Zusätzliche Kopfzeilen für resourceUrl |
additionalLogoutParameters | Record<string, string> | Nein | Zusätzliche Abmeldeparameter |
loginHint | Zeichenfolge | Nein | Kürzel für additionalParameters.login_hint |
prompt | Zeichenfolge | Nein | Kürzel für additionalParameters.prompt |
iosPrefersEphemeralSession | Boolesche Werte | No | iOS-Browser-Sitzung bevorzugen |
logsEnabled | boolean | No | Erweiterte Debug-Ausgaben 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-LoginAnmeldung
Anmeldungconst result = await SocialLogin.login({ provider: 'oauth2', options: { providerId: 'github', scope: 'read:user user:email', loginHint: 'user@example.com', },});Umleiten Sie den Flow im Web
Abschnitt mit dem Titel "Umleiten Sie den Flow im Web"Verwenden Sie flow: 'redirect' wenn Sie einen vollständigen Seiten-umleitung anstelle 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);}Anmeldestatus und Abmeldung
Abschnitt mit dem Titel "Anmeldestatus und Abmeldung"const status = await SocialLogin.isLoggedIn({ provider: 'oauth2', providerId: 'github',});
await SocialLogin.logout({ provider: 'oauth2', providerId: 'github',});Aktualisierung von Tokens
Abschnitt mit dem Titel “Aktualisierungstoken”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() erlaubt Ihnen ein Aktualisierungstoken selbst zu übergeben und gibt die frische OAuth2-Antwort zurück.
Ermitteln Sie das aktuelle Zugriffstoken
Abschnitt mit dem Titel “Ermitteln Sie das aktuelle Zugriffstoken”const code = await SocialLogin.getAuthorizationCode({ provider: 'oauth2', providerId: 'github',});
console.log(code.accessToken);Anbieter-spezifische Beispiele
Abschnitt mit dem Titel “Anbieter-spezifische Beispiele”GitHub Beispiel
Abschnitt mit dem Titel “GitHub Beispiel”Verwenden Sie GitHub wenn Sie einen einfachen OAuth-Flow 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);Azure AD / Microsoft Entra ID-Beispiel
Abschnitt mit dem Titel „Azure AD / Microsoft Entra ID-Beispiel“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-Beispiel
Abschnitt mit dem Titel „Auth0-Beispiel“Auth0 ist eine gute Wahl, wenn Sie OIDC plus einen benutzerdefinierten 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);}Okta-Beispiel
Abschnitt mit dem Titel “Okta-Beispiel”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);Keycloak-Beispiel
Abschnitt mit dem Titel “Keycloak-Beispiel”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);OAuth2-Antwortform
Abschnitt mit dem Titel “OAuth2-Antwortform”Erfolgreiche OAuth2-Anmeldungen liefern:
| Feld | Beschreibung |
|---|---|
providerId | Der konfigurierte Anbieter-Schlüssel, der für die Anmeldung verwendet wird |
accessToken | Zugriffs-Token-Payload oder null |
idToken | OIDC-ID-Token, wenn der Provider eins zurückgegeben hat |
refreshToken | Refresh-Token, wenn die angeforderten Berechtigungen es erlaubten |
resourceData | Rohes JSON abgerufen von resourceUrl |
scope | Eingriffsberechtigungen |
tokenType | In der Regel bearer |
expiresIn | Gültigkeitsdauer des Tokens in Sekunden |
Referenz für die Anbieterkonfiguration
Abschnitt mit dem Titel „Referenz für die Anbieterkonfiguration“-
Erstellen Sie ein OAuth-Anwendungsprogramm Öffnen GitHub Entwickler-Einstellungen und erstellen Sie ein neues OAuth-App.
-
Setzen Sie die Callback-URL Verwenden Sie die Redirect-URL Ihrer App, zum Beispiel
myapp://oauth/github. -
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',},},});
Azure AD / Microsoft Entra ID
Abschnitt mit dem Titel „Azure AD / Microsoft Entra ID“-
Registrieren Sie eine App Gehe zu Azure Portal, öffne
App registrations, und erstellen Sie eine native oder mobile App-Registrierung. -
Zurücksetzen der URI Hinzufügen einer mobilen oder Desktop-URI, die sich an Ihre App-Callback-URL anpasst.
-
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',},},});
-
Eine native Anwendung erstellen Öffnen Sie das Auth0-Dashboard und einen Native-App erstellen.
-
Ermögliche Callback-URLs setzen Fügen Sie die genaue Redirect-URL ein, die Ihre Capacitor-App verwendet.
-
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',},},});
-
OIDC-Native-App erstellen In der Okta-Admin-Konsole eine OIDC-Native-Anwendung erstellen.
-
Hinzufügen Sie Ihre Redirect-URI Registrieren Sie die genaue Callback-URL, die Ihre App verwendet.
-
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 mit dem Titel „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 mit dem Titel „Plattformspezifische Hinweise“- Das Plugin verwendet
ASWebAuthenticationSession. - Setze
iosPrefersEphemeralSession: trueWenn Sie eine private Browser-Sitzung mit keiner gemeinsamen Cookie-Verwendung wünschen.
- OAuth-Weiterleitungen kehren durch Ihren App-Scheme und -Host zurück.
- Stellen Sie sicher, dass die Anbieter-Callback-URL genau Ihren Android-Deep-Link-Einrichtungen entspricht.
- Die Erweiterung verarbeitet bereits die OAuth-Aktivität. Fügen Sie nur benutzerdefinierte Intent-Filter hinzu, wenn Ihre App ein anderes Redirect-Muster benötigt.
- Die Popup-Flussmethode ist die Standardmethode und funktioniert gut für Einseitige-Apps.
- Die Redirect-Flussmethode ist besser, wenn der Anbieter Popups 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.
Sicherheitsbest Practices
Abschnitt mit dem Titel „Sicherheitsbest Practices”-
Verwenden Sie PKCE Behalten Sie
pkceEnabled: truefür öffentliche Clients. -
Präferieren Sie die Autorisierungscode-Fluss
responseType: 'code'ist sicherer als der implizite Fluss. -
Validieren Sie Token auf Ihrem Backend Entschlüsseln und überprüfen Sie Aussteller, Zielgruppe, Ablaufdatum und Signatur serverseitig.
-
Speichern Sie Refresh-Tokens sicher Für native Apps, kombinieren Sie diesen Plugin mit @capgo/capacitor-persistent-account.
-
Verwenden Sie HTTPS überall Produktionsauth-Endpunkte und -Logout-Endpunkte sollten immer HTTPS verwenden.
Schwierigkeiten beheben
Abschnitt mit dem Titel ‘Schwierigkeiten beheben’providerId is required
Abschnitt mit dem Titel ‘providerId ist erforderlich’Jeder OAuth2-Methode ist die konfigurierte Anbieter-Schlüssel erforderlich:
await SocialLogin.login({ provider: 'oauth2', options: { providerId: 'github' },});OAuth2 provider "xxx" not configured
Abschnitt mit dem Titel ‘OAuth2-Anbieter „xxx“ nicht konfiguriert’Aufrufen SocialLogin.initialize() vor der Anmeldung und stellen Sie sicher, dass der providerId entspricht dem Schlüssel unter oauth2.
Ursache für die Umleitung nicht übereinstimmen
Abschnitt mit dem Titel „Umwleitung-URL-Mismatch“- Vergleichen Sie die konfigurierte Umwleitung-URL in Ihrer App und im Anbieter-Dashboard Zeichen für Zeichen.
- Achten Sie auf verbleibende 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.
Kein Refresh-Token zurückgegeben
Abschnitt mit dem Titel „Kein Refresh-Token zurückgegeben“Die meisten Anbieter geben nur Refresh-Tokens aus, wenn Sie Scopes wie offline_access oder explizit den Einwilligungszustand erzwingen. Überprüfen Sie die Anbieter-spezifische Richtlinie.
Fehlersuche bei Token-Übertragung
Abschnitt mit dem Titel „Fehlersuche bei Token-Übertragung“Aktivieren Sie logsEnabled: true auf der Anbieter-Konfiguration, um generierte URLs und Token-Übertragungs-Details zu überprüfen.
Verwandte Dokumente
Abschnitt: Verwandte DokumenteWeitermachen von Generic OAuth2-Anbietern
Abschnitt: Weitermachen von Generic OAuth2-AnbieternWenn 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-biometrisch und Zwei-Faktor-Authentifizierung Für die Implementierungsdetails in Zwei-Faktor-Authentifizierung.