Sicherheit für Crowdin-Apps
Wenn du eine selbst gehostete App erstellst, die mit Daten von Crowdin arbeitet, authentifiziert sie sich mit crowdin_app und erhält bei jeder von Crowdin gesendeten Anfrage ein signiertes JWT-Token. Durch die Überprüfung dieses Tokens kann die App erkennen, ob eine Anfrage tatsächlich von der erwarteten Quelle stammt.
Beide SDKs übernehmen das für dich: Das Crowdin Apps SDK validiert das Token und extrahiert den Kontext, während eine serverlose App überhaupt kein Token erhält. Der folgende Abschnitt richtet sich an Apps, die Anfragen selbst überprüfen, beispielsweise eine App, die in einer anderen Sprache geschrieben wurde.
Crowdin öffnet eine Modulseite mit dem Token und seinem Kontext in der Query-Zeichenfolge:
https://example.com/app-module?jwtToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJCcjRhMmhwUW……MX0.yt-lbv3Z8JyIGX4jG405mjZvX8lwc1q0EfWdTtm9GCc&origin=https://{domain}.crowdin.com&clientId=your-client-idQuery-Parameter:
jwtToken | Typ: Beschreibung: JWT-Token, das zur Autorisierung verwendet wird. |
origin | Typ: Beschreibung: Host, der zum Öffnen einer Modulseite verwendet wird. |
clientId | Typ: Beschreibung: Die ID des für die Autorisierung verwendeten OAuth-Clients. |
Das Token ist mit dem OAuth-Client-Secret signiert, das nur Crowdin und deine App kennen. Eine gültige Signatur ist daher ein Nachweis dafür, woher die Anfrage stammt. Überprüfe die Signatur und den Ablaufzeitpunkt jedes Tokens, das deine App erhält, beispielsweise in einer Middleware, die vor dem restlichen Code ausgeführt wird. Jede der vorhandenen Bibliotheken übernimmt das für dich.
{ "aud": "Br4a2hpQiNW96anuuO4a", "sub": "1", "domain": null, "context": {}, "iat": 1600000000, "exp": 1600000900}Eigenschaften:
aud | Typ: Beschreibung: ID des OAuth-Clients, der das Token ausgestellt hat. |
sub | Typ: Beschreibung: Kennung des Benutzers, der eine Anfrage an die Crowdin-App stellt. |
domain | Typ: Beschreibung: Die Organisation, über die auf die App zugegriffen wird. Immer vorhanden und in Crowdin immer |
context | Typ: Beschreibung: Die Umgebung, in der das Modul geöffnet wird, z. B. das Projekt, das Gebietsschema und die Zeitzone des Benutzers. |
iat | Typ: Beschreibung: Gibt den Ausstellungszeitpunkt des Tokens an. |
exp | Typ: Beschreibung: Gibt den Ablaufzeitpunkt des Tokens an. |