Authentifizierungs-Client-API
Als Entwickler können Sie die Authentifizierung unter Verwendung der folgenden Komponenten, Hooks und Funktionen in Ihrer Anwendung implementieren.
AuthProvider-Kontextanbieter
AuthProvider ist der Kontextanbieter, den Sie zum Wrapping Ihrer Anwendung verwenden können. Er ermöglicht den Zugriff auf den useAuth-Hook.
AuthProvider umfasst die folgenden Eigenschaften.
children- Typ
React.ReactNodeBeschreibungNodes wrapped by the
AuthProvidercomponent. location- Typ
{ pathname: string }BeschreibungCurrent window location. If you use
react-router-dom, pass the result ofuseLocation(). onLocationChange- Typ
(location: string | Record<string, unknown>) => voidBeschreibungCallback to change window location. If you use
react-router-dom, passpath => history.replace(path).
Bei einer Anwendung, die mit der Jutro-Startanwendung erstellt wurde, müssen Sie AuthProvider nicht selbst hinzufügen. Es wird automatisch in der Funktion start() hinzugefügt.
Weitere Informationen finden Sie auf der Seite Implementieren einer benutzerdefinierten Authentifizierungslogik.
useAuth-Hook
Der Hook useAuth bietet Zugriff auf den Authentifizierungsstatus. Er gibt ein AuthContext-Objekt mit den folgenden Variablen zurück:
import { useAuth } from '@jutro/auth';
const {
isPending,
error,
login,
logout,
renewTokens,
isAuthenticated,
accessToken,
idToken,
userInfo,
getIsAuthenticated,
getAccessToken,
getIdToken,
getUserInfo,
} = useAuth();
Variablen für Authentifizierungskontext
Gemeinsame Variablen
Die folgenden Variablen sind unabhängig von der verwendeten Methode zur Token-Aktualisierung gleich.
isPending- Typ
booleanBeschreibungIf set to
true, indicates that authentication is still pending. error- TypBeschreibung
This property is present only if an error occurs. It contains an
AuthErrorobject with details about the error. login- TypBeschreibung
The function called to initiate a log in. For more details, see the login and logout section.
logout- TypBeschreibung
The function called to initiate a log out. For more details, see the login and logout section.
renewTokens- Typ
(extraParams?: Record<string, string>) => Promise<void>BeschreibungThe function called to refresh a user's authentication tokens. This gives you more control over when the token refresh flow is triggered. For more details, see the renewToken function section.
Variablen für aktive Token-Aktualisierung
Die folgenden Variablen werden bei der aktiven Token-Aktualisierung verwendet. Bei Verwendung der passiven Token-Aktualisierung sind alle auf null festgelegt.
isAuthenticated- Typ
boolean | nullBeschreibungIf set to
true, the user is currently authenticated. accessToken- Typ
string | nullBeschreibungThis string is the user's encoded access token. For further details, see the accessToken and idToken section.
idToken- Typ
string | nullBeschreibungThis string is the user's encoded ID token. For further details, see the accessToken and idToken section.
userInfo- Typ
OidcUserInfo | nullBeschreibungThis is the user's OIDC user info. For more details, see the OIDC documentation.
Variablen für passive Token-Aktualisierung
Die folgenden Variablen werden bei der passiven Token-Aktualisierung verwendet. Diese Variablen funktionieren wie die Variablen für die aktive Token-Aktualisierung, sind jedoch asynchron, erneuern die Token bei Bedarf und geben die erwarteten Daten zurück. Wenn die aktive Token-Aktualisierung verwendet wird oder bei der Token-Erneuerung Fehler auftreten, wird eine Zusage zurückgegeben, die in nullaufgelöst wird.
getIsAuthenticated- Typ
() => Promise<boolean | null>BeschreibungThis function returns a promise that resolves to the user's current authentication status. If it resolves to
true, the user is currently authenticated. getAccessToken- Typ
() => Promise<string | null>BeschreibungThis function returns a promise that resolves to the user's encoded access token. For further details, see the accessToken and idToken section.
getIdToken- Typ
() => Promise<string | null>BeschreibungThis function returns a promise that resolves to the user's encoded ID token. For further details, see the accessToken and idToken section.
getUserInfo- Typ
() => Promise<OidcUserInfo | null>BeschreibungThis function returns a promise that resolves to user's OIDC user info. For more details, see the OIDC documentation.
Weitere Informationen zur Token-Aktualisierung finden Sie auf der Seite zur Token-Aktualisierung.
Anmeldung und Abmeldung
Diese beiden Funktionen werden vom Hook useAuth zurückgegeben. Mit ihnen können Sie den Anmelde- bzw. Abmeldevorgang auslösen. Sie können die folgenden Argumente an einen von beiden übergeben:
Umleitungspfad
Der Umleitungspfad bezeichnet den Pfad, zu dem die Umleitung nach dem Anmelde- oder Abmeldevorgang erfolgen soll.
Sie können den Umleitungspfad nach der Anmeldung oder Abmeldung auf verschiedene Weise konfigurieren. Standardmäßig werden in Jutro integrierte Pfade verwendet: /callback für die Anmeldung und /logout für die Abmeldung. Sie können auch benutzerdefinierte Pfade mithilfe der Konfigurationsvariablen festlegen: JUTRO_AUTH_REDIRECT_PATH für die Anmeldung und JUTRO_AUTH_LOGOUT_REDIRECT_PATH für die Abmeldung. Außerdem können Sie den Umleitungspfad festlegen, indem Sie ihn als erstes Argument an die Funktionen login() und logout() übergeben. Diese Parameter lauten callbackPath für login() und fromPath für logout().
In der folgenden Tabelle werden diese Informationen zusammengefasst:
| Funktion | Parametername | Aus Konfigurationsdatei übernommener Wert | Integrierter Standardpfad |
|---|---|---|---|
login() | callbackPath | JUTRO_AUTH_REDIRECT_PATH | /callback |
logout() | fromPath | JUTRO_AUTH_LOGOUT_REDIRECT_PATH | /logout |
Die Umgebungsvariable JUTRO_AUTH_PREPEND_AUTH_CALLBACKS_WITH_BASEURL muss auf true gesetzt werden, damit der Wert routerBasename der als Parameter eingegebenen Zeichenfolge den Funktionen login() oder logout() vorangestellt wird.
JUTRO_AUTH_PREPEND_AUTH_CALLBACKS_WITH_BASEURL wurde in Jutro Version 10.10 eingeführt, und die Einstellung JUTRO_AUTH_PREPEND_AUTH_CALLBACKS_WITH_BASEURL=false gilt als verworfen. Anweisungen zur Verwendung der Funktionen login() und logout() ohne automatisches Voranstellen von routerBasename finden Sie in einer Version der Dokumentation, die älter als 10.10 ist.Die Umgebungsvariable JUTRO_AUTH_LOGOUT_REDIRECT_PATH kann entweder der Endpfad der Abmeldungs-URL oder die vollständige URL sein.
Angenommen, die Anwendung wird unter der gefälschten URL guidewire.com/my-best-app bereitgestellt und Ihr gewünschter Weiterleitungspfad für die Abmeldung lautet guidewire.com/my-best-app/logout:
JUTRO_AUTH_LOGOUT_REDIRECT_PATH=/my-best-app/logout // correct - will render as https://guidewire.com/my-best-app/logout
JUTRO_AUTH_LOGOUT_REDIRECT_PATH=/logout // correct - will render as https://guidewire.com/my-best-app/logout
JUTRO_AUTH_LOGOUT_REDIRECT_PATH=https://guidewire.com/my-best-app/logout // correct - will render as https://guidewire.com/my-best-app/logout
JUTRO_AUTH_LOGOUT_REDIRECT_PATH=guidewire.com/my-best-app/logout // incorrect - will render as https://guidewire.com/my-best-app/guidewire.com/my-best-app/logout
additionalParams
Das Vorhandensein dieses Parameters hängt davon ab, welche Funktion und welchen Client Sie verwenden. Für die login-Funktion ist er in beiden Clients vorhanden. Für die logout-Funktion ist er für den generischen Okta-Client nicht vorhanden.
login() additionalParams
In beiden Clients hat die login()-Funktion ein optionales additionalParams-Argument. Dieses Argument verwendet ein Objekt mit zusätzlichen Abfrageparametern, die Sie der Anmeldeanforderung hinzufügen möchten.
Sie können sie global mit der Laufzeitumgebungsvariablen JUTRO_AUTH_LOGIN_QUERY_EXTRAS festlegen.
login('/my-account', { idp: 'some-idp' });
Um diese Werte basierend auf Umgebungsvariablen dynamisch festzulegen, fügen Sie folgenden Code in der .env-Datei oder als Bereitstellungsvariable ein:
JUTRO_AUTH_LOGIN_QUERY_EXTRAS = {"idp":"${YOUR_IDP_ID}"}
Verwenden Sie den folgenden Code lokal, um die ordnungsgemäße Ausführung zu überprüfen. Bei ordnungsgemäßer Ausführung wird er in ein Objekt mit einer leeren Zeichenfolge im idp-Schlüssel aufgelöst, wenn YOUR_IDP_ID nicht angegeben ist. Wenn YOUR_IDP_ID angegeben ist, wird der Wert entsprechend festgelegt.
import { getConfigValue } from '@jutro/config';
...
console.log(JSON.parse(getConfigValue('JUTRO_AUTH_LOGIN_QUERY_EXTRAS')));
logout() additionalParams
Wenn Sie den generischen OIDC-Client verwenden, hat die Funktion logout() auch ein optionales additionalParams-Argument.
Sie können es global mit der Laufzeitumgebungsvariablen JUTRO_AUTH_LOGOUT_QUERY_EXTRAS festlegen.
Um diese Werte basierend auf Umgebungsvariablen dynamisch festzulegen, fügen Sie folgenden Code in der .env-Datei oder als Bereitstellungsvariable ein:
JUTRO_AUTH_LOGOUT_QUERY_EXTRAS = {"idp":"${YOUR_IDP_ID}"}
Verwenden Sie den folgenden Code lokal, um die ordnungsgemäße Ausführung zu überprüfen. Bei ordnungsgemäßer Ausführung wird er in ein Objekt mit einer leeren Zeichenfolge im idp-Schlüssel aufgelöst, wenn YOUR_IDP_ID nicht angegeben ist. Wenn YOUR_IDP_ID angegeben ist, wird der Wert entsprechend festgelegt.
import { getConfigValue } from '@jutro/config';
...
console.log(JSON.parse(getConfigValue('JUTRO_AUTH_LOGOUT_QUERY_EXTRAS')));
renewTokens-Funktion
Standardmäßig wird eine Token-Aktualisierung 40 Sekunden vor der Ablaufzeit ausgeführt (dieses Verhalten kann abweichen, wenn ein anderer Ansatz zur Token-Aktualisierung verwendet wird). Wenn Sie mehr Kontrolle über den Tokenaktualisierungsablauf haben möchten, können Sie die renewTokens Funktion aus dem Hook useAuth verwenden. Diese ermöglicht die Initialisierung des Tokenaktualisierungsablaufs zu einem beliebigen Zeitpunkt.
Um beispielsweise zu programmieren, dass eine Schaltfläche eine Tokenaktualisierung erzwingt, wenn sie angeklickt wird, können Sie diesen Code verwenden:
import React from 'react';
import { useAuth } from '@jutro/auth';
// ...
const { renewTokens } = useAuth();
// ...
<button onClick={() => renewTokens()}>Force tokens renewal</button>;
Bei mehreren Aufrufen von renewTokens werden nicht mehrere Abläufe initiiert – nur der erste Aufruf wird ausgeführt, und alle nachfolgenden Aufrufe geben die gleiche Zusage zurück. Ein neuer Erneuerungsablauf kann erst initiiert werden, nachdem der vorherige abgeschlossen ist.
renewTokens gibt eine Promise<void> aus, aber es ist nicht sicher, einen neuen Tokenwert direkt dort auszulesen, da möglicherweise der alte Wert angezeigt wird. Die korrekte Art des Zugriffs auf einen neuen Token lautet:const { accessToken, renewTokens } = useAuth();
// ...
useEffect(() => {
console.log('new token', accessToken);
}, [accessToken]);
// ...
<button onClick={() => renewTokens()}>Force tokens renewal</button>;
accessToken und idToken
Mit der Eigenschaft accessToken oder idToken können Sie das Authentifizierungstoken eines Benutzers abrufen. Diese Eigenschaft wird mit den Funktionen decodeToken und decodeJWTTokenPayload aus dem @jutro/auth-Paket verwendet.
decodeToken
Die Funktion decodeToken decodiert das Authentifizierungstoken eines Benutzers.
import { useAuth, decodeToken } from '@jutro/auth';
const { accessToken } = useAuth();
const decodedToken = decodeToken(accessToken);
decodeJWTTokenPayload
Die Funktion decodeJWTTokenPayload decodiert die Token-Nutzdaten ohne Kopfzeile, Signatur oder andere Felder, die das Token enthalten kann.
import { useAuth, decodeJWTTokenPayload } from '@jutro/auth';
const { accessToken } = useAuth();
const decodedJWTTokenPayload = decodeJWTTokenPayload(accessToken);