JVM 的 JSON Web 令牌支持是不是包括 impl、api 和 jackson?

Posted

技术标签:

【中文标题】JVM 的 JSON Web 令牌支持是不是包括 impl、api 和 jackson?【英文标题】:JSON Web Token Support For The JVM does include impl, api and jackson?JVM 的 JSON Web 令牌支持是否包括 impl、api 和 jackson? 【发布时间】:2021-05-02 04:09:23 【问题描述】:

我需要在 java 中使用依赖项 JWT 来在我的 Java 应用程序中进行安全令牌身份验证。 我的问题是。我是否需要单独使用所有 3 个依赖项:

    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-api</artifactId>
        <version>0.11.0</version>
    </dependency>

    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-impl</artifactId>
        <version>0.11.0</version>
        <scope>runtime</scope>
    </dependency>
    
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-jackson</artifactId>
        <version>0.11.0</version>
        <scope>runtime</scope>
    </dependency>

或者我可以使用一个包含所有这些的单个:

    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>

以及为什么我需要在运行时指定范围

请注意,上面的依赖声明都只有一个编译时依赖,其余的都被声明为运行时依赖。

这是因为 JJWT 的设计使您只依赖于明确设计供您在应用程序中使用的 API,而所有其他内部实现细节(可以在没有警告的情况下更改)被归为仅运行时依赖项。如果您想确保 JJWT 的稳定使用和随着时间的推移进行升级,这一点非常重要:

JJWT 保证其所有工件的语义版本控制兼容性,jjwt-impl .jar 除外。对jjwt-impl .jar 没有此类保证,并且该.jar 中的内部更改可能随时发生。切勿使用 compile 范围将 jjwt-impl .jar 添加到您的项目中 - 始终使用 runtime 范围声明它。

Understanding JJWT Dependencies

【问题讨论】:

【参考方案1】:

在 JJWT 版本 0.10.0 之前,io.jsonwebtoken:jjwt-apiio.jsonwebtoken:jjwt-impl 都被打包为单个工件 io.jsonwebtoken:jjwt

随着 JJWT 版本 0.10.0 的发布,这些已分为两个不同的工件。

来自JJWT Release Notes, version 0.10.0:的发行说明

向后兼容性通知:

JJWT 的新模块化设计利用了 compile 和 运行时依赖项,以确保您只依赖于公共 API 在您的应用程序中使用是安全的。所有内部/私人 实现类已移至新的 jjwt-impl 运行时 依赖。

如果您过去依赖于任何内部实现类, 你有两个选择:

重构您的代码以使用仅限公共的 API 类和接口 在 jjwt-api .jar 中。您可能在 内部实现应该可以通过更新的清洁器获得 该 .jar 中的接口和帮助程序类。

指定新的 jjwt-impl .jar 不是作为运行时依赖项,而是作为 编译依赖。这将使您完全升级到 JJWT 0.10.0 向后兼容,但您需要自担风险。 JJWT 将使 jjwt-impl .jar 中没有语义版本兼容性保证 向前进。语义版本控制将非常小心地遵守 然而,在所有其他 JJWT 依赖项中。

【讨论】:

以上是关于JVM 的 JSON Web 令牌支持是不是包括 impl、api 和 jackson?的主要内容,如果未能解决你的问题,请参考以下文章

我如何知道 json Web 令牌是不是被篡改

我是不是需要使用快速会话以及护照和 JSON Web 令牌进行身份验证?

Web Api中的JSON Web令牌与承载令牌

如果用户想从不同的机器上退出帐户,JSON Web 令牌 (JWT) 是不是会被拒绝或列入黑名单?

将 JSON Web 令牌列入黑名单

验证使用 JSON Web 加密 (JWE) 加密的安全令牌的颁发者?