Es gibt viele häufige Missverständnisse im Zusammenhang mit der Zeugen Jehovas. Eine davon ist beispielsweise, dass die JWT verschlüsselt ist (tatsächlich nur signiert und base64url-codiert). In der Praxis stoße ich oft auf ziemlich seltsame Lösungen, wenn nur eine Sitzungskennung in einem JWT gespeichert ist (wenn Sie mit einer Sitzung arbeiten, benötigen Sie kein JWT). Alternativ speichert die JWT nur eine Benutzer-ID, deren Profil bei jeder Anforderung aus der Datenbank angefordert wird (tatsächlich ist die JWT sinnvoll, wenn Sie die Anzahl der Anforderungen an die Datenbank reduzieren möchten). Oder, noch seltsamer, die JWTs selbst werden in der Datenbank gespeichert.
Einer der objektiven Gründe für dieses Missverständnis der Rolle und des Ortes der JWT ist, dass die JWT-Spezifikation das JWT-Format beschreibt und nichts darüber aussagt, wie die JWT angewendet werden sollte.
Der Wunsch, darüber zu schreiben, ist schon lange entstanden. Und nachdem ich mir ein anderes Projekt mit einem etwas seltsamen Einsatz von JWT angesehen hatte, entschied ich mich immer noch.
Beginnen wir mit der wichtigsten Entmystifizierung. Das JWT könnte folgendermaßen aussehen:
eyJhbGciOiJSUzI1NiJ9.eyJpcCI6IjE3Mi4yMS4wLjUiLCJqdGkiOiIwNzlkZDMwMGFiODRlM2MzNGJjNWVkMTlkMjg1ZmRmZWEzNWJjYzExMmYxNDJiNmQ5M2Y3YmIxZWFmZTY4MmY1IiwiZXhwIjoxNjA3NTE0NjgxLCJjb3VudCI6MiwidHRsIjoxMH0.gH7dPMvf2TQaZ5uKVcm7DF4glIQNP01Dys7ADgsd6xcxOjpZ7yGhrgd3rMTHKbFyTOf9_EB5NEtNrtgaIsWTtCd3yWq21JhzbmoVXldJKDxjF841Qm4T6JfSth4vvDF5Ex56p7jgL3rkqk6WQCFigwwO2EJfc2ITWh3zO5CG05LWlCEOIJvJErZMwjt9EhmmGlj9B6hSsEGucCm6EDHVlof6DHsvbN2LM3Z9CyiCLNkGNViqr-jkDKbn8UwIuapJOrAT_dumeCWD1RYDL-WNHObaD3owX4iqwHss2yOFrUfdEynahX3jgzHrC36XSRZeEqmRnHZliczz99KeiuHfc56EF11AoxH-3ytOB1sMivj9LID-JV3ihaUj-cDwbPqiaFv0sL-pFVZ9d9KVUBRrkkrwTLVErFVx9UH9mHmIRiO3wdcimBrKpkMIZDTcU9ukAyaYbBlqYVEoTIGpom29u17-b05wY3y12lCA2n4ZqOceYiw3kyd46IYTGeiNmouG5Rb5ld1HJzyqsNDQJhwdibCImdCGhRuKQCa6aANIqFXM-XSvABpzhr1UmxDijzs30ei3AD8tAzkYe2cVhv3AyG63AcFybjFOU8cvchxZ97jCV32jYy6PFphajjHkq1JuZYjEY6kj7L-tBAFUUtjNiy_e0QSSu5ykJaimBsNzYFQ
Wenn Sie es mit base64url dekodieren, wird der Mythos der "Geheimhaltung" sofort zerstört:
{"alg":"RS256"}{"ip":"172.21.0.5","jti":"079dd300ab84e3c34bc5ed19d285fdfea35bcc112f142b6d93f7bb1eafe682f5","exp":1607514681,"count":2,"ttl":10} O2Mrn%!OPzN{hk11l\9 Mkd Z&ۚWJP%^DǞ8*Xև|!䵥C&D0Di?Ak nue7bݟB 6AV*9)S.jNv `EcG9ތ*6kQDv_xzߥEdgbs<wP( Ӂ"?K ?WxiHp<>,/EU]T䒼-Q+\}P fbuȦ 7 ɦZTJ jhonӜ-v 6j9ǘ :!z#fEewQ*44 bl"&t!F *s>]+U&8z-@Fap2p\S܇}0hˣŦy*ԛb1H/A U3bA$) j)
Der erste Teil in geschweiften Klammern heißt JOSE-Header und wird unter https://tools.ietf.org/html/rfc7515 beschrieben . Kann Felder enthalten, von denen die wichtigsten alg. Wenn Sie {"alg": "none"} festlegen, wird das Token ohne Signatur als gültig betrachtet. Auf diese Weise kann jeder mit einem manuell generierten Token ohne Signatur auf Ihre API zugreifen. Die meisten Bibliotheken lehnen solche Token derzeit standardmäßig ab, überprüfen Sie jedoch Ihre APIs für alle Fälle.
— . , , , jti — exp — . , JWT — .
, , . . , ( ). , , JWT.
JWT — JSON, .
"" , , JWT. ( - — ).
. ( , "" ) , , .
. , . "" API . JWT , — JWT .
, JWT — , , - , .
, , JWT . ( Redis) . — , .
. JWT , JWT ( )? , "-" . "-" .
"-" . "-" , . , , , - .
Es gibt ein ziemlich interessantes Problem bei der Löschung von "bedingten" Token. Wenn sie auf unbestimmte Zeit freigegeben werden, müssen sie im Falle einer Stornierung ebenfalls auf unbestimmte Zeit aufbewahrt werden. Wenn Sie sie für einen bestimmten Zeitraum freigeben, erfolgt die Abmeldung von der "ewigen" Sitzung, wenn während der Gültigkeit des Tokens kein Aufruf der API erfolgt.
apapacy@gmail.com
9. Dezember 2020