首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有一种干净利落的方法来改变Nimbus Jose JWT中的默认JWKSetCache TTL?

Nimbus Jose是一个用于处理JSON Web Token(JWT)的Java库。在Nimbus Jose中,JWKSetCache是用于缓存JSON Web Key Set(JWKS)的接口,而TTL是指缓存的生存时间。

要改变Nimbus Jose JWT中的默认JWKSetCache TTL,可以按照以下步骤进行操作:

  1. 创建一个自定义的JWKSetCache实现类,继承自Nimbus库中的DefaultJWKSetCache类。
  2. 在自定义的JWKSetCache实现类中,重写get方法和put方法,以实现自定义的缓存逻辑。
  3. 在重写的get方法中,可以通过设置缓存的生存时间来改变默认的TTL。可以使用Java的System.currentTimeMillis()方法获取当前时间戳,并与缓存的创建时间戳进行比较,判断缓存是否过期。
  4. 在重写的put方法中,可以设置缓存的创建时间戳,以便在get方法中进行过期判断。
  5. 在应用程序中,使用自定义的JWKSetCache实现类替换默认的JWKSetCache实现类。

以下是一个示例代码,展示了如何改变Nimbus Jose JWT中的默认JWKSetCache TTL:

代码语言:txt
复制
import com.nimbusds.jose.jwk.JWKSetCache;
import com.nimbusds.jose.jwk.source.RemoteJWKSet;

public class CustomJWKSetCache extends DefaultJWKSetCache {

    private static final long TTL = 3600 * 1000; // 设置缓存的生存时间为1小时

    @Override
    public RemoteJWKSet get(String uri) {
        CacheEntry entry = cache.get(uri);
        if (entry != null && !isExpired(entry)) {
            return entry.getJWKSet();
        } else {
            // 缓存过期或不存在,重新获取JWKSet并缓存
            RemoteJWKSet jwkSet = super.get(uri);
            cache.put(uri, new CacheEntry(jwkSet));
            return jwkSet;
        }
    }

    @Override
    public void put(String uri, RemoteJWKSet jwkSet) {
        cache.put(uri, new CacheEntry(jwkSet));
    }

    private boolean isExpired(CacheEntry entry) {
        long currentTime = System.currentTimeMillis();
        return (currentTime - entry.getCreationTime()) > TTL;
    }

    private static class CacheEntry {
        private final RemoteJWKSet jwkSet;
        private final long creationTime;

        public CacheEntry(RemoteJWKSet jwkSet) {
            this.jwkSet = jwkSet;
            this.creationTime = System.currentTimeMillis();
        }

        public RemoteJWKSet getJWKSet() {
            return jwkSet;
        }

        public long getCreationTime() {
            return creationTime;
        }
    }
}

在应用程序中,使用自定义的JWKSetCache实现类替换默认的JWKSetCache实现类:

代码语言:txt
复制
import com.nimbusds.jose.jwk.source.JWKSource;
import com.nimbusds.jose.jwk.source.RemoteJWKSet;

JWKSource<RemoteJWKSet> jwkSource = new RemoteJWKSet<>(jwksURI, new CustomJWKSetCache());

这样,就可以通过自定义的JWKSetCache实现类来改变Nimbus Jose JWT中的默认JWKSetCache TTL。请注意,这只是一个示例,实际应用中可能需要根据具体需求进行适当的修改和调整。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

听说你JWT库用起来特别扭,推荐这款贼好用

最近发现了一个更好用JWTnimbus-jose-jwt,简单易用,API非常易于理解,对称加密和非对称加密算法都支持,推荐给大家!...简介 nimbus-jose-jwt是最受欢迎JWT开源库,基于Apache 2.0开源协议,支持所有标准签名(JWS)和加密(JWE)算法。...使用 接下来我们将介绍下nimbus-jose-jwt使用,主要使用对称加密(HMAC)和非对称加密(RSA)两种算法来生成和解析JWT令牌。...对称加密(HMAC) 对称加密指的是使用相同秘钥来进行加密和解密,如果你秘钥不想暴露给解密方,考虑使用非对称加密。 要使用nimbus-jose-jwt库,首先在pom.xml添加相关依赖; <!...("用户拥有的权限") private List authorities; } 在JwtTokenServiceImpl类添加获取默认PayloadDto方法,JWT过期时间设置为

2.1K30

如何为微服务做安全加密? | 微服务系列第十一篇

该规范使用JSON Web令牌(JWT),这是一种基于令牌身份验证,它定义了一种算法,以保证在基于REST应用程序以可靠和安全方式传输任何敏感信息。...Third Block zzzzzzzzz 表示标头和有效负载签名,保证在传输过程没有任何更改。 在下面的示例,您有一个JWT,三个块每一个都用点分隔。 ? 1....JWT头,包含散列算法和base64编码令牌类型。 2来自JWT有效载荷,采用base64编码格式 3标头和有效载荷签名在base64编码。...Java提供了诸如Auth0,Jose4J和Nimbus JOSE JWT之类库来创建JWT。 本文使用Nimbus JOSE JWT实现。...在实现JWT生成器之后,生成字符串用于访问安全微服务,这将在后面的部分讨论。 以下示例使用此库创建JWT: ? 1将声明创建为JSON对象,并使用声明枚举值定义已声明声明和默认声明。

3.2K80

使用Spring Security 资源服务器来保护Spring Cloud 微服务

JWT解码 要校验JWT就必须实现对JWT解码功能,在Spring Security OAuth2 Resource Server模块默认提供了解码器,这个解码器需要调用基于: spring.security.oauth2...jwsAlgorithm 指定jwt使用算法,默认 RSA-256。 issuerUri 获取OAuth2.0 授权服务器元数据端点。...自定义jwt解码器 spring-security-oauth2-jose是Spring Securityjose规范依赖。我将根据该类库来实现自定义JWT解码器。...不得不说Nimbusjwt类库比jjwt要好用多。 自定义资源服务器配置 接下来配置资源服务器。...JWT个性化解析 从JWT Token解析数据并生成JwtAuthenticationToken操作是由JwtAuthenticationConverter来完成

1.1K30

JSON Web加密高危漏洞

如果您使用是带有ECDH-ESgo-jose,node-josejose2go,Nimbus JOSE + JWTjose4,请把它更新到最新版本。...介绍 JSON Web Token(JWT)是在 OAuth specification family定义,基于JSON一个开放标准(RFC 7519),它用于创建access tokens。...一旦计算了共享密钥,密钥协商结果可以通过以下两种方式使用: 1.在直接密钥协议模式,直接作为"enc"算法内容加密密钥(CEK) 2.在具有密钥包装模式密钥协议,作为一种使用A128KW,A192KW...jose2go修复程序登陆在1.3版本Nimbus JOSE+JWT为Maven central推出了一个固定工件,即v4.34.2。 这是原始POC要点。...鸣谢 作者要感谢go-jose,node-josejose2go,Nimbus JOSE + JWTjose4维护者对问题积极响应。

1.7K50

什么是JavaJWT?提供一个使用JWT实际案例

JWT(JSON Web Token)是一种用于身份验证和授权开放标准。它以JSON格式存储信息,可以轻松地在网络上传输,并在不同系统之间进行交互。...在Java,我们可以使用现有的库来实现JWT生成和解析,例如JJwt和Nimbus JOSE + JWT。...如果解析和验证成功,则可以从载荷获取用户信息。 需要注意是,为了保护JWT安全性,应该采取一些措施,例如使用HTTPS协议传输、设置短暂过期时间、不在JWT存储敏感信息等。...JWT一种简单而强大身份验证和授权机制,在Web应用和移动应用得到广泛应用。它能够减少服务端负担,提高系统可扩展性和安全性。...在Java,我们可以使用现有的库来实现JWT生成和解析,实现快速且安全身份验证和授权。

14910

JWT源码审计来看NONE算法漏洞(CVE-2015-9235)

JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑而独立方法,用于在各方之间安全地将信息作为JSON对象传输。 由于此信息是经过数字签名,因此可以被验证和信任。...(即JWT)和所使用签名算法,例如HMAC SHA256(默认,HS256)或RSA(RS256)。...它会使用Base64编码组成JWT结构第一部分。 注意:Base64是一种编码,也就是说,它是可以被翻译回原来样子,它并不是一种加密过程。...: “maven: com.auth0 / java-jwt / 3.3.0” Brian Campbell实现jose4j: “maven: org.bitbucket.b_c / jose4j /...0.6.3” connect2id实现nimbus-jose-jwt: “maven: com.nimbusds / nimbus-jose-jwt / 5.7” Les Haziewood实现jjwt

2.1K30

你可能没那么了解 JWT

0)前言 最近在开发一个统一认证服务,涉及到 OIDC 协议,其中授权码模式所颁发 id_token 使用JWT ( JSON Web Token ) ,因为这次使用默认签名算法和以往不同...方式,我们上面一直说 JWT 其实是 JOSE 体系之一。...3)JWA 和 JWS 以及 JWK JWA 全称是 JSON Web Algorithms ( RFC 7518[5] ) ,字如其名, JOSE 体系涉及到所有算法就是它来定义,比如通用算法有...因此,使用 JWS 方式 Payload 是不适合传递敏感数据JWT 一种实现 JWE 就是来解决这个问题。...JWS:签名和验证 Token JWE:加密和解密 Token JWA:定义 JOSE 体系涉及到所有算法 JWK:用 JSON 来表示密钥 最后,再次附上 JOSE 体系图,相关 RFC 均备注在图上了

1.2K20

JWT介绍及其安全性分析

此外,所有信息(秘密密钥除外)都可以位于令牌本身。但是,世界上没有十全十美 主要问题之一是JWT一种非常复杂机制。...请参阅CVE-2018-0114节点 node-jose漏洞细节: https://cve.mitre.org/cgi-bin/cvename.cgi?...攻击者可以通过以下方法来伪造有效JWS对象:删除原始签名,向标头添加新公钥,然后使用与该JWS标头中嵌入公钥关联(攻击者拥有的)私钥对对象进行签名,从而利用此漏洞 早于2016年,在Go-jose...此外,JWT一种非常流行机制,没有标准,流行替代方法,它还证明了其安全性。 之前指出安全问题可以分为三类: 1、JWT规范本身存在问题(例如,无算法)。...0x04 JWT替代 https://paseto.io/ Paseto是您对JOSEJWT,JWE,JWS)所钟爱一切,而没有困扰JOSE标准许多设计缺陷。

3.6K31

【黄啊码】PHP实现token验证登录(JWT鉴权登录)

什么是JWT JWT(JSON Web Token)是为了在网络应用环境间传递声明而执行一种基于JSON开放标准。...简单说,JWT就是一种Token编码算法,服务器端负责根据一个密码和算法生成Token,然后发给客户端,客户端只负责后面每次请求都在HTTP header里面带上这个Token,服务器负责验证这个Token...是不是合法有没有过期等,并可以解析出subject和claim里面的数据。...二、相关问题 JWT Token需要持久化在redis、Memcached吗? 不应该这样做,无状态jwt变成了有状态了,背离了JWT通过算法验证初心。...其中,用户id、用户username是特意存储在token信息,也可以增加一些其他信息,这样在解析时候就可以直接获取到这些信息,不能是敏感数据 验证令牌验证这个Token是不是合法有没有过期等

1.2K20

Java 近期新闻:JDK 19-RC1、Spring 更新、Micronaut、Helidon、Payara 等

根据 JDK 19 发布时间表,Oracle Java 平台组首席架构师 Mark Reinhold 正式宣布,由于 Build 36 没有未解决 P1 Bug,所以 JDK 19 已经进入了第一个发布候选阶段...依赖项也有了升级:Spring Framework 5.3.22、Spring Security 5.8.0-M2、nimbus-jose-jwt:9.23 和 Gradle Enterprise 插件...Spring Shell 2.1.1 已经发布,修复问题包括:分离内置命令文档、命令行选项补全不正确以及 Spring Shell 默认为基本 Jakarta EE 验证器。...-2022-37422 安全补丁,这是一个零日漏洞,会影响部署在 Payara Platform 所有发行版默认根目录 Web 应用程序,同时还发布了 6 个组件更新和 7 个改进。...Apache Camel Apache Camel 3.14.5 已经发布,包含 15 个改进和修复,比如——当一个 cron 配置在 camel-quartz 过期,上下文将无法启动。

99110
领券