Platform-SDK-Konvention
Platform SDK bietet eine standardisierte Möglichkeit, den Client mit dem Logto-Dienst auf der spezifischen Plattform zu integrieren und beschleunigt den Integrationsprozess.
- Platform SDK kapselt den Kern mit plattformspezifischer Implementierung.
- Platform SDK sollte grundlegende Typen bereitstellen, die die Verwendung des SDKs erleichtern.
- Platform SDK sollte als Klasse mit dem Namen
LogtoClient
exportiert werden.
Grundlegende Typen
LogtoConfig
Name | Typ | Erforderlich | Standardwert | Anmerkungen |
---|---|---|---|---|
endpoint | string | ✅ | Der OIDC-Dienstendpunkt. | |
appId | string | ✅ | Die Anwendungs-ID stammt von der Anwendung, die wir im Logto-Dienst registriert haben. | |
scopes | string[] | [openid, offline_access, profile] | Dieses Feld enthält immer openid , offline_access und profile . | |
resources | string[] | Die geschützten Ressourcenindikatoren, die wir verwenden möchten. | ||
prompt | string | consent | Der Prompt-Wert, der in generateSignInUri verwendet wird. | |
usingPersistStorage | boolean | true | Entscheidet, ob Anmeldeinformationen auf dem lokalen Rechner gespeichert werden sollen oder nicht. |
*Anmerkungen
- Du kannst dieses
LogtoConfig
erweitern, wenn du es benötigst. usingPersistStorage
wird nur in Client-SDKs bereitgestellt. Z.B. iOS, Android und SPA.
AccessToken
Name | Typ | Anmerkungen |
---|---|---|
token | string | |
scope | string | |
expiresAt | number | Zeitstempel in Sekunden |
LogtoClient
Eigenschaften
logtoConfig
Typ
LogtoConfig
oidcConfig
Typ
OidcConfigResponse?
accessTokenMap
Typ
Map<string, AccessToken>
Schlüssel
- Der Schlüssel sollte mit
scope
undresource
konstruiert werden. - Die Werte in
scope
sollten alphabetisch sortiert und mit Leerzeichen verbunden werden. - Der Schlüssel sollte im Muster:
${scope}@${resource}
konstruiert werden. - Wenn
scope
oderresource
null oder leer sind, sollten ihre Werte als leer behandelt werden.
Z.B., "offline_access openid read:usr@https://logto.dev/api"
, "@https://logto.dev/api"
, "openid@"
, "@"
.
Wert
AccessToken
, das dieexpiresAt
-Eigenschaft verwendet, um die genaue Zeit anzugeben, wann ein Zugangstoken abläuft.
Anmerkungen
- Der
scope
wird immer ein Nullwert sein, da wir in Logto V1 keine benutzerdefinierten Berechtigungen unterstützen. - Beim Erstellen des Zugangstoken-Schlüssels zur Speicherung eines Zugangstokens:
scope
wird immer ein Nullwert sein.- Wenn das Zugangstoken kein JWT ist, behandle das
resource
als Nullwert. - Wenn das Zugangstoken ein JWT ist, dekodiere das Zugangstoken und verwende den
aud
-Anspruchswert der Nutzlast alsresource
-Teil des Zugangstoken-Schlüssels.
refreshToken
Typ
string?
Anmerkungen
refreshToken
wird unter den folgenden Umständen gesetzt oder aktualisiert:
- Lade
refreshToken
aus dem Speicher. - Der Server gibt ein
refreshToken
in der Antwort zurück, wenn das Token erfolgreich abgerufen wurde. - Abmelden (wird auf
null
gesetzt).
idToken
Typ
string?
Anmerkungen
idToken
sollte überprüft werden, wenn es vom Backend stammt.idToken
wird unter den folgenden Umständen gesetzt oder aktualisiert:- Lade
idToken
aus dem Speicher. - Der Server gibt ein
idToken
in der Antwort zurück, wenn das Token erfolgreich abgerufen wurde. - Abmelden (wird auf
null
gesetzt).
- Lade
Methoden
Konstruktor
Parameter
Parameter | Typ |
---|---|
logtoConfig | LogtoConfig |
Rückgabetyp
LogtoClient
Anmerkungen
- Du kannst zusätzliche Parameter hinzufügen, wenn du es benötigst.
- Wenn die Verwendung von Persistenzspeicher in logtoConfig aktiviert ist, bietet das Platform SDK die folgenden Funktionen:
- Speichere persistente Daten mit einem eindeutigen Schlüssel basierend auf
clientId
. - Lade
refreshToken
undidToken
beim Initialisieren vom lokalen Rechner. - Speichere
refreshToken
undidToken
lokal beiCore.fetchTokenByAuthorizationCode
undCore.fetchTokenByRefreshToken
.
- Speichere persistente Daten mit einem eindeutigen Schlüssel basierend auf
isAuthenticated
Um zu wissen, ob ein Benutzer authentifiziert ist oder nicht.
Dies kann auch als Getter definiert werden.
Ein Benutzer wird als authentifiziert behandelt, wenn:
- Wir erfolgreich ein ID-Token erhalten haben.
- Wir ein ID-Token vom lokalen Rechner geladen haben.
Parameter
Keine.
Rückgabetyp
boolean
SignIn
Diese Methode sollte einen Anmeldevorgang starten und das Platform SDK sollte alle Schritte, die eine Autorisierung benötigt, um den Anmeldeumleitungsprozess abzuschließen, übernehmen.
Der Benutzer wird authentifiziert, nachdem diese Methode erfolgreich aufgerufen wurde.
Der Anmeldeprozess wird auf die Core-SDK-Funktionen zurückgreifen:
generateSignInUri
verifyAndParseCodeFromCallbackUri
fetchTokenByAuthorizationCode
Anmerkungen:
- Da generateSignInUri die benötigten Ressourcen enthält, müssen wir die Ressource nicht an die fetchTokenByAuthorizationCode-Funktion übergeben.
Parameter
Parameter | Typ |
---|---|
redirectUri | string |
Rückgabetyp
void
Ausnahmen
- Jeder Fehler, der während dieses Anmeldeprozesses auftritt.
SignOut
Der Abmeldeprozess sollte die folgenden Schritte befolgen:
- Lösche lokalen Speicher, Cookies, persistente Daten oder etwas anderes.
- Widerrufe das erhaltene Auffrischungstoken über
Core.revoke
(der Logto-Dienst wird alle zugehörigen Tokens widerrufen, wenn das Auffrischungstoken widerrufen wird). - Leite den Benutzer zur Abmelde-URL von Logto weiter, es sei denn, Schritt 1 löscht die Sitzung der Anmeldeseite.
Anmerkungen:
- In Schritt 2 ist
Core.revoke
ein asynchroner Aufruf und wird den Abmeldeprozess nicht blockieren, selbst wenn er fehlschlägt. - Schritt 3 basiert auf
Core.generateSignOutUri
, um die Abmelde-URL von Logto zu generieren.
Parameter
Parameter | Typ | Erforderlich | Standardwert |
---|---|---|---|
postLogoutRedirectUri | string | null |
Rückgabetyp
void
Ausnahmen
- Jeder Fehler, der während dieses Abmeldeprozesses auftritt.
getAccessToken
getAccessToken
ruft ein AccessToken
durch resource
und scope
aus accessTokenMap
ab und gibt den token
-Wert dieses AccessToken
zurück.
Wir setzen den scope
auf null
, wenn wir den Schlüssel der accessTokenMap
erstellen, da wir in Logto V1 keine benutzerdefinierten Berechtigungen unterstützen.
Anmerkungen
- Wenn kein entsprechendes
AccessToken
gefunden werden kann, führe eineCore.fetchTokenByRefreshToken
-Aktion aus, um das benötigte Token abzurufen. - Wenn das
accessToken
nicht abgelaufen ist, gib dentoken
-Wert darin zurück. - Wenn das
accessToken
abgelaufen ist, führe eineCore.fetchTokenByRefreshToken
-Aktion aus, um ein neuesaccessToken
abzurufen, aktualisiere die lokaleaccessTokenMap
und gib den neuentoken
-Wert darin zurück. - Wenn
Core.fetchTokenByRefreshToken
fehlschlägt, informiere den Benutzer über die aufgetretene Ausnahme. - Wenn das Auffrischungstoken nicht gefunden werden kann, informiere den Benutzer über eine nicht autorisierte Ausnahme.
- Nur durch das Erhalten eines
refreshToken
nach der Anmeldung können wir eineCore.fetchTokenByRefreshToken
-Aktion ausführen.
Parameter
Parameter | Typ | Erforderlich | Standardwert |
---|---|---|---|
resource | string | null |
Rückgabetyp
string
Ausnahmen
- Der Benutzer ist nicht authentifiziert.
- Die Eingabe
resource
ist nicht imlogtoConfig
gesetzt. - Kein Auffrischungstoken gefunden vor
Core.fetchTokenByRefreshToken
. Core.fetchTokenByRefreshToken
ist fehlgeschlagen.
getIdTokenClaims
getIdTokenClaims
gibt ein Objekt zurück, das die Ansprüche der idToken
-Eigenschaft trägt.
Parameter
Keine.
Rückgabetyp
IdTokenClaims
Ausnahmen
- Der Benutzer ist nicht authentifiziert.