我使用下面的技术堆栈什么是存储JWT令牌的最佳MYSQL或Maria DB数据类型?
- Laravel 5.2
- MySQL的
和安全性我使用JWT(JSON网络令牌)
我是能够争取到我的应用程序使用JWT。
我想将JWT令牌存储在mysql数据库中。
问题以下哪种数据类型最适合在MySQL DB中存储JWT令牌?
- VARCHAR
- CLOB
- TEXT
- 长文本
我使用下面的技术堆栈什么是存储JWT令牌的最佳MYSQL或Maria DB数据类型?
和安全性我使用JWT(JSON网络令牌)
我是能够争取到我的应用程序使用JWT。
我想将JWT令牌存储在mysql数据库中。
问题以下哪种数据类型最适合在MySQL DB中存储JWT令牌?
至于别的,答案是 “看情况”。
首先,您需要确定存储完全编码的JWT是否是正确的解决方案。我倾向于不存储JWT字符串,而是存储用于构建JWT的声明,这将在数据库中节省大量空间。
如果您决定存储JWT是正确的方法,那么我们可以查看您的选项。
TEXT和LONGTEXT只是CLOB的类型,所以我们可以忽略它。
TEXT和VARCHAR都有64kb的限制,所以上面的任何东西都需要LONGTEXT(或者MEDIUMTEXT,你没有提到但是是一个选项)。
TEXT和VARCHAR的区别在于VARCHAR存储在行中,但TEXT基本上是一个指针。如果您经常阅读JWT,则VARCHAR会更快,但较大的字符串会导致每个行更大,这将成为性能下降。
与JWT一样大,我会说TEXT是将JWT存储在数据库中的不错选择。如果你确信JWT将保持非常小的状态,那么VARCHAR可能会产生更好的读取性能,但是最好用真实世界的数据进行测试以确保它的正确性。
如果您需要的字段大于TEXT所能提供的字段,那么我会重申我的建议以避免存储编码的JWT,但是LONGTEXT是一个选项。
我决定接受迈克尔的建议:存储索赔数据。 “jti”字段似乎是为此设置的 - http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName – user2426679
基于该例子中,我建议这一个“编码的” BASE64令牌:
TEXT CHARACTER SET ascii COLLATE ascii_bin
一般而言,JSON应的TEXT
或VARCHAR
一些尺寸与CHARACTER SET utf8
或utf8mb4
。 (该COLLATION
可能是无关紧要的。)
TEXT
限于64KB;使用较小的VARCHAR
没有多大优势。
回复:“TEXT
只是一个指针” - 不太正确。在InnoDB中的某些ROW_FORMATs
中,TEXT
或VARCHAR
可能是指向该行扩展的指针。该操作主要取决于ROW_FORMAT
,而不是数据类型。
JWT并不需要存储在数据库中吗? – ceejayoz
@ceejayoz刷新标记也可以是JWT本身,我相信需要将它们存储在数据存储中。 – georaldc