[RELEASE] MTA:SA JWT Module - WIP

  • Hallo,


    Wir, das eXo-Reallife Team, möchten heute ein Modul releasen, dass auch auf unserem Server Verwendung findet.
    Es handelt sich hierbei um ein JWT Modul, dass von StiviK entwickelt wurde.
    https://en.wikipedia.org/wiki/JSON_Web_Token


    Welche Features hat das Modul?

    • verify JWT
    • sign JWT
    • read Claims

    Welche Algorithmen werden unterstüzt?

    • HS256
    • RS256
    • more comming soon

    Wie sieht die API aus?

    Lua
    bool jwtSign(function(string/boolean) callback, table claims, string algorithm, string secret/public_key_path, string private_key_path)

    Diese funktion erstellt und signed euch einen neuen JWT (Token), der token wird dem callback übergeben. Falls etwas nicht funktioniert hat gibt die funktion false zurück oder der callback wird mit false aufgerufen.



    Lua
    bool jwtVerify(string token, string secret/public_key_path, bool is_file_path = false)

    Diese funktion nimmt einen JWT (Token) und verified diesen, es wird auch anhand des keys die signatur überprüft.



    Lua
    table jwtGetClaims(string token)

    Diese funktion nimmt einen JWT (Token) und gibt euch als Key-Value-Pairs die claims zurück.


    Note: Das ganze Modul ist noch WIP (work-in-progress) somit könnte sich die API noch ändern.
    Alle anderen Funktionen die das Modul enthält findet ihr in unserer Dokumentation.


    Warum releast das eXo-Team den ganzen Spaß?
    Nunja, das hat den einfachen Grund, wir wollen unsere Arbeit auch mit anderen teilen und das nicht einfach für uns behalten! Wir hoffen wir können euch damit bereichern und vlt. sogar helfen!


    Wo kann man dann das Modul runterladen?
    Das ganze Modul ist Open-Source und kann in unsere GitHub-Organisation eingesehen werden.
    Released haben wir das ganze unter der MIT License diese kann, hier, eingesehen werden.


    GitHub-Organisation: github.com/eXo-OpenSource
    Repository: github.com/eXo-OpenSource/ml_jwt
    Download des Modules (Windows/Linux): https://github.com/eXo-OpenSource/ml_jwt/releases


    Falls ihr Fehler findet oder Vorschläge habt, könnt ihr einfach einen neuen Issue erstellen und wir werden uns das ganze ansehen!



    So nun das wars auch, viel Spaß mit dem Modul!


    - StiviK und das eXo-Reallife Team

    Einmal editiert, zuletzt von StiviK ()

  • JWT steht für JSON Web Tokens, diese werden für APIs benutzt, als alternative einer Session, um die authentizität bzw. Identität eines Nutzters zu sicherstellen / mit einem Identity Provider auszutauschen. (Mehr dazu: https://de.wikipedia.org/wiki/JSON_Web_Token)
    Mithilfe des Moduls kann man z.B. für private APIs die man aus MTA ausrufen möchte einene solchen Token austellen. Aber auch validieren oder nur die claims des Tokens auslesen.


    - StiviK

  • JWT steht für JSON Web Tokens, diese werden für APIs benutzt, als alternative einer Session, um die authentizität bzw. Identität eines Nutzters zu sicherstellen. (Mehr dazu: de.wikipedia.org/wiki/JSON_Web_Token)
    Mithilfe des Moduls kann man z.B. für private APIs die man aus MTA ausrufen möchte einene solchen Token austellen.

    Ok. Da ich lediglich einen Hauptschulabschluss besitze, war es erst ein wenig schwer zu begreifen und ich musste es mehrmals durchlesen, mir verinnerlichen, aber ich habe nun im Groben verstanden, wozu es gut sein soll. Vielleicht findet es eines Tages Verwendung.

  • Das Modul wird in Zukunft auf eXo verwendet damit wir beim CEF die Authentifizierung für den User mitgeben können. Dh das die Spieler Ingame das Forum öffnen können und automatisch eingeloggt sind.


    Aktuell haben wir ein etwas umständliches System mit einer API im Einsatz die uns den JWT Token generiert und diese wird durch ein sauberes Plugin abgelöst.

    If A equals success, then the formula is A equals X plus Y plus Z. X is work. Y is play. Z is keep your mouth shut.

  • In meiner täglichen Arbeit habe ich sehr viel mit JWT und OAuth zu tun, eigentlich schade dass man da bisher noch nicht vorher mal auf die Idee gekommen ist dass für MTA zu nutzen, da es doch eine recht große Sicherheit bietet.


    Sind in Zukunft noch weitere Tokenabstraktionen geplant? (AccessToken, RefreshToken, IdentyToken usw...) Wie lange sind die Token gültig, kann man die Dauer selbst definieren?


    Wirklich sicher ist das Ganze ja nur wenn die Signaturebene geheim bleibt, kann man sich dazu Modulseitig dann eigene Signaturregeln definieren?

    Ich verstehe auch nicht so ganz, welchem Zweck es dient.

    Man kann das ganze sogar noch weiter treiben, so ein Token besteht aus einem Header, Body und einer verschlüsselten Signatur. In dem Body kann man Daten jeglicher Art unterbringen, man könnte also schützenswerte Daten sicher zwischen verschiedenen Servern teilen, auf jegliche Art von Webservice pumpen usw. Das System ist solange die Signierung nicht bekannt ist, äußert Missbrauchssicher und nur schwer auszuhebeln.


    Edit: Um die Sicherheit noch weiter zu erhöhen, kann man noch signierte Timestamps mit einbeziehen. So fällt jeder abgefangene Request und eine möglicherweise manipulierte Payload definitiv auf die Nase. Aber ich glaube für ein Spiel würde das zu weit gehen, glaube auch nicht dass die kriminelle Energie und das Wissen darum in so einer gekapselten Community groß genug ist.

  • Wie lange sind die Token gültig, kann man die Dauer selbst definieren?

    Ja, dies muss man einfach dann über die claims dementsprechend setzen.

    Lua
    jwtSign(function() end, {["exp"] = "0000000"}, "HS256", "secret")


    Wirklich sicher ist das Ganze ja nur wenn die Signaturebene geheim bleibt, kann man sich dazu Modulseitig dann eigene Signaturregeln definieren?

    Für die Sicherheit ist man ja selbst verantwortlich.
    Das Modul signed den Token mit dem gegeben Algorithmus und dem Secret/PrivateKey


    Sind in Zukunft noch weitere Tokenabstraktionen geplant? (AccessToken, RefreshToken, IdentyToken usw...)

    Inwiefern meinst du das?


    - StiviK

  • Das stimmt. Ich frage a er höflichkeits halber

    Es würde auch in der Lizenz stehen ;)
    https://github.com/eXo-OpenSource/ml_jwt/blob/master/LICENSE


    Sind in Zukunft noch weitere Tokenabstraktionen geplant? (AccessToken, RefreshToken, IdentyToken usw...) Wie lange sind die Token gültig, kann man die Dauer selbst definieren?

    Ich hab das Gefühl das du etwas anderes im Kopf (in die Richtung von OAuth etc.) hast.
    https://tools.ietf.org/html/rfc7519 <- das wäre die Spezifikation für JWT



    If A equals success, then the formula is A equals X plus Y plus Z. X is work. Y is play. Z is keep your mouth shut.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!