2016-04-15 171 views
5

我使用下面的技术堆栈什么是存储JWT令牌的最佳MYSQL或Maria DB数据类型?

  • Laravel 5.2
  • MySQL的

和安全性我使用JWT(JSON网络令牌)

我是能够争取到我的应用程序使用JWT。

我想将JWT令牌存储在mysql数据库中。

问题以下哪种数据类型最适合在MySQL DB中存储JWT令牌?

  1. VARCHAR
  2. CLOB
  3. TEXT
  4. 长文本
+0

JWT并不需要存储在数据库中吗? – ceejayoz

+0

@ceejayoz刷新标记也可以是JWT本身,我相信需要将它们存储在数据存储中。 – georaldc

回答

5

至于别的,答案是 “看情况”。

首先,您需要确定存储完全编码的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是一个选项。

+0

我决定接受迈克尔的建议:存储索赔数据。 “jti”字段似乎是为此设置的 - http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName – user2426679

1

基于该例子中,我建议这一个“编码的” BASE64令牌:

TEXT CHARACTER SET ascii COLLATE ascii_bin 

一般而言,JSON应的TEXTVARCHAR一些尺寸与CHARACTER SET utf8utf8mb4。 (该COLLATION可能是无关紧要的。)

TEXT限于64KB;使用较小的VARCHAR没有多大优势。

回复:“TEXT只是一个指针” - 不太正确。在InnoDB中的某些ROW_FORMATs中,TEXTVARCHAR可能是指向该行扩展的指针。该操作主要取决于ROW_FORMAT,而不是数据类型。

相关问题