Hauptmenü

KIX18: Gültigkeit des Autorisierungs-Tokens der Rest Api

Begonnen von kerstin, 06.04.2023 12:34:32

⏪ vorheriges - nächstes ⏩

kerstin

Moin,

Ich habe eine kurze Frage zur RestApi - wie lange ist ein Token, den man über /auth erhält gültig? Wir haben Skripte, die jede Nacht auf die RestApi zugreifen und sich dafür jedes Mal neu authentifizieren um einen neuen Autorisierungs-Token zu erhalten. Wäre es auch möglich einmalig einen Token zu erzeugen und diesen anstatt des Passworts zu hinterlegen oder müsste man diesen in regelmäßigen Abständen oder z.B. nach updates erneuern?

Danke und Gruß,
Kerstin

Beatrice Müller

Hallo Kerstin,

das Limit der Benutzer-Token ist global in der SysConfig "TokenMaxTime" (Standard: 16h) hinterlegt.

Es gibt zusätzlich aber die Möglichkeit für einzelne User spezielle Token zu generieren.
Dazu kann das Konsole-Skript (Admin -> KIX -> System -> Konsole) Console::Command::Admin::Token::Create verwendet werden.
Usage:
 kix.Console.pl Admin::Token::Create --user ... --user-type ... --valid-until ... [--remote-ip ...] [--allowed-ops ...] [--ignore-max-idle-time ...] [--denied-ops ...] [--description ...]

Options:
 --user ...                     - The user identifier which will used by the token. Agent = UserLogin, Customer = CustomerKey.
 --user-type ...                - The type of the user. Possible values are 'Agent' or 'Customer'
 --valid-until ...              - The token will be valid until the given date+time. Format: YYYY-MM-DD HH24:MI:SS
 [--remote-ip ...]              - The remote IP for which the token should be valid. The value 0.0.0.0 represents all IPs.
 [--allowed-ops ...]            - A comma separated list to allow specific API operation types. RegEx is supported.
 [--ignore-max-idle-time ...]   - Set to 1 to not validate the MaxIdleTime for this token.
 [--denied-ops ...]             - A comma separated list to deny specific API operation types. RegEx is supported.
 [--description ...]            - It's recommended to add a description to identify the token.
 [--help]                       - Display help for this command.
 [--no-ansi]                    - Do not perform ANSI terminal output coloring.
 [--quiet]                      - Suppress informative output, only retain error messages.

Mit den Optionen valid-until und ignore-max-idle-time sollte die Anforderung abgedeckt werden können.

Viele Grüße
Beatrice

kerstin

Hallo Beatrice,

Super. Vielen Dank!

Dann probiere ich das mal damit :-)

Schöne Grüße,
Kerstin

kerstin

Hallo Beatrice,

Eine Frage habe ich noch. Ich habe die Option '--remote-ip ...' so verstanden, dass der entsprechende Token nur von dieser IP aus verwendet werden darf. Allerdings scheint es egal zu sein, welchen Wert ich da eintrage, ich kann den Token scheinbar von beliebigen IPs aus benutzen. Habe ich die Bedeutung falsch verstanden, oder wird der Wert einfach nicht ausgewertet?

Vielen Dank und schöne Grüße,
Kerstin

kerstin

Hallo nochmal :-)

ich habe jetzt den Sysconfigwert "TokenCheckRemoteIP" entdeckt, der auf 0 gesetzt ist. Ich kann ihn aber leider nicht verändern. Hängt das vielleicht mit einer anderen Einstellung zusammen, die ich an andere Stelle gemacht habe, oder ist das so gedacht?

Danke und Gruß,
Kerstin

Beatrice Müller

Hallo Kerstin,

aktuell kann die Option '--remote-ip' nicht verwendet werden, da bei der Aktivierung des SysConfig-Schlüssels 'TokenCheckRemoteIP' ein Problem mit dem FE-Container besteht. Das prüft unsere Entwicklung bereits.

Der Wert könnte nur über die Config-Datei geändert werden (https://forum.kixdesk.com/index.php?topic=11873.msg17262#msg17262).

Viele Grüße
Beatrice

kerstin

Hallo Beatrice,

Vielen Dank für die Antwort.

Wenn ich den Wert in der Config-Datei ändere, scheitert das Starten des Frontend Servers mit folgenden Fehlermeldungen (von backend und frontend):

backend_1  |

backend_1  | API ERROR: ProcessID: 486 Time: 2023-06-12 10:54:39

backend_1  |

backend_1  |      Method: GET

backend_1  |    Resource: /session/user?include=Preferences,RoleIDs,Contact,DynamicFields

backend_1  |    Duration: 7 ms

backend_1  |  HTTPStatus: 401 Unauthorized

backend_1  |        Code: Unauthorized

backend_1  |    Message: User is not authorized. The requested operation cannot be executed.

backend_1  |

backend_1  | ::ffff:172.22.0.5 - - [12/Jun/2023:10:54:39 +0200] "GET /api/v1/session/user?include=Preferences,RoleIDs,Contact,DynamicFields HTTP/1.1" 401 103 86607

frontend_1  | Mon Jun 12 2023 08:54:39 GMT+0000 (Coordinated Universal Time) - error: 29 - Error during HTTP (session/user) GET request.

frontend_1  | Mon Jun 12 2023 08:54:39 GMT+0000 (Coordinated Universal Time) - error: 29 - (401) Unauthorized User is not authorized. The requested operation cannot be executed.

frontend_1  | Mon Jun 12 2023 08:54:39 GMT+0000 (Coordinated Universal Time) - error: uncaughtException: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "#<Error>".

frontend_1  | UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "#<Error>".

kix_frontend_1 exited with code 1

Es ist also wohl vermutlich besser zu warten, was die Entwicklung herausfindet? Oder hast Du noch eine andere Idee?

Danke und Gruß,
Kerstin

Beatrice Müller

Hallo Kerstin,

genau, deshalb hatte ich darauf hingewiesen, dass die Einschränkung derzeit nicht verwendet werden kann.
Sobald ich Neuigkeiten dazu habe, melde ich mich noch einmal.

Viele Grüße
Beatrice

kerstin

Hallo Beatrice,

Ah - ok. Das hatte ich dann nicht ganz richtig verstanden. Ich dachte die Einschränkung gälte nur für die Einstellung des Wertes 'TokenCheckRemoteIP' über das Webinterface.
Dann warte ich :-)

Vielen Dank nochmal und schönen Gruß,
Kerstin

Beatrice Müller

Hallo Kerstin,

seit der v33.1 kann der SysConfig-Schlüssel 'TokenCheckRemoteIP' wieder verwendet werden.

Viele Grüße
Beatrice