【问题标题】:What is the best MYSQL or Maria DB data type to store JWT token?存储 JWT 令牌的最佳 MYSQL 或 Maria DB 数据类型是什么?
【发布时间】:2016-08-06 23:02:12
【问题描述】:

我正在使用以下技术栈

  • Laravel 5.2
  • MySQL

为了安全起见,我正在使用 JWT(JSON Web 令牌)

我能够使用 JWT 保护我的应用程序。

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

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

  1. VARCHAR
  2. CLOB
  3. 文本
  4. 长文本

【问题讨论】:

  • JWT 的重点不是不需要存入数据库吗?
  • @ceejayoz 刷新令牌本身也可以是 JWT,我相信需要将它们存储在数据存储中。

标签: mysql database laravel-5.2 jwt sqldatatypes


【解决方案1】:

与其他任何事情一样,答案是“视情况而定”。

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

【讨论】:

  • 我决定采纳 Michael 的建议:存储索赔数据。 “jti”字段似乎是为此而设计的——self-issued.info/docs/…
【解决方案2】:

根据示例,我建议将其用于“编码”base64 令牌:

TEXT CHARACTER SET ascii COLLATE ascii_bin

一般来说,JSON 的大小应该是 TEXTVARCHARCHARACTER SET utf8utf8mb4。 (COLLATION 可能无关紧要。)

TEXT 限制为 64KB;使用较小的VARCHAR 并没有太大优势。

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

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 2018-01-27
    • 2013-08-12
    • 1970-01-01
    • 2013-10-04
    • 2021-01-13
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多