首页 > 其他分享 >keycloak~jwks-rsa中使用的设计模式

keycloak~jwks-rsa中使用的设计模式

时间:2024-04-23 11:11:57浏览次数:31  
标签:UrlJwkProvider 缓存 jwks 包装 rsa 对象 设计模式

com.auth0.jwk组织下面的jwks-rsa包,主要实现的是通过公钥对jwt的签名进行验证,在这个包中,它使用了包装器的设计模式,对默认的jwks提供者添加了一缓存的支持,通过建立一个GuavaCachedJwkProvider类,传入一个默认的UrlJwkProvider来将这个Provider进行包装,让它具有缓存的能力!

包装器模式

包装器模式(Wrapper Pattern)是一种结构型设计模式,它允许在不改变原始对象接口的情况下,动态地向对象添加新的功能。包装器模式通过创建一个包装类,将原始对象作为包装类的成员,并在包装类中定义额外的行为或功能来扩展原始对象的功能。

以下是包装器模式的一些关键角色和特点:

  • Component(组件):定义了被包装对象的接口,可以是一个抽象类或接口。

  • ConcreteComponent(具体组件):实现了Component接口,是被包装的原始对象。

  • Wrapper(包装器):也称为Decorator,持有一个指向Component的引用,并实现了与Component相同的接口。在包装器中可以添加额外的功能,以增强原始对象的行为。

包装器模式的优点包括:

  1. 灵活性:可以动态地为对象添加新的功能,而无需修改原始对象的代码。
  2. 遵循开闭原则:可以在不修改现有代码的情况下扩展对象的功能。
  3. 简化代码:将功能分散到多个小类中,避免了单个类变得庞大复杂。

总的来说,包装器模式可以帮助我们在运行时动态地为对象添加新的功能,同时保持代码的灵活性和可维护性。常见的应用场景包括日志记录、缓存、加密等功能的动态添加。

jwks-rsa中的体现

  • 组件 JwkProvider
  • 具体组件 UrlJwkProvider
  • 包装器
    • GuavaCachedJwkProvider 缓存能力
    • RateLimitedJwkProvider 限流能力

我们为UrlJwkProvider进行缓存的包装

	/**
	 * 缓存包装器.
	 * @throws MalformedURLException
	 * @throws JwkException
	 */
	@Test
	public void jwkReadCacheWrapper() throws MalformedURLException, JwkException {
		UrlJwkProvider jwkProvider = new UrlJwkProvider(new URL(jwksUrl));
		JwkProvider cachedJwkProvider = new GuavaCachedJwkProvider(jwkProvider);
		Jwk jwk = cachedJwkProvider.get("certsId");
		Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);

		DecodedJWT jwt = JWT.decode(token);
		// check JWT is valid
		algorithm.verify(jwt);
	}

程序员的修养,多看好的开源框架,多思考与总结。

标签:UrlJwkProvider,缓存,jwks,包装,rsa,对象,设计模式
From: https://www.cnblogs.com/lori/p/18152405

相关文章

  • As a reader --> AdvDiffuser: Natural Adversarial Example Synthesis with Diffusio
    ......
  • As a reader --> Diffusion Models for Imperceptible and Transferable Adversarial
    ......
  • keycloak~使用jwks验证token的合法性
    keycloak提供了jwks服务,其地址可以在/auth/realms/fabao/.well-known/openid-configuration的返回结果中找到,jwks_uri它表示了公钥的颁发者,可以使用颁发出来的公钥来验证token的签名,基地址也是固定的/auth/realms/fabao/protocol/openid-connect/certs。springboot构建keycloak的......
  • Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算
    Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算1.定义请求和返回对象的上下文对象packagecom.example.core.mydemo.java.filter;importjava.time.LocalDateTime;publicclassOrderReqContext{/***租客会员号*/StringmemNo;......
  • 工程中实践的微服务设计模式
    最近在读《微服务架构设计模式》,开始的时候我非常的好奇,因为在我印象中,设计模式是常说的那23种设计模式,而微服务的设计模式又是什么呢?这个问题也留给大家,在文末我会附上我对这个问题的理解。本次文章的内容主要是工作中对微服务设计模式的应用,希望能对大家有所启发。事务发件箱......
  • 23种设计模式彩图-设计模式之禅
    《TheZenofDesignPatterns》—《设计模式之禅》书中的23种设计模式彩图:......
  • 什么是观察者设计模式?
    什么是观察者观察者模式的主要角色包括:主题(Subject):也称为被观察者或可观察对象。它维护了一系列观察者对象,并提供方法用于注册、删除和通知观察者。当主题的状态发生改变时,它会通知所有注册的观察者。观察者(Observer):观察主题的对象。观察者定义了一个更新方法,主题在状态......
  • Photomator 3.3.5 (macOS Universal) - 照片编辑软件
    Photomator3.3.5(macOSUniversal)-照片编辑软件适用于Mac、iPhone和iPad的终极照片编辑器请访问原文链接:https://sysin.org/blog/photomator/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org无耻抄袭者YuTao,请立遁!!!Photomator适用于Mac、iPhone和iPa......
  • Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具
    TopazPhotoAI3.0.0(macOSUniversal)-AI图片修复工具MaximizeImageQualitywithAI请访问原文链接:TopazPhotoAI3.0.0(macOSUniversal)-AI图片修复工具,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org无耻抄袭者YuTao,请立遁!!!TopazPhotoAI3发......
  • 密码学中的RSA算法与椭圆曲线算法
    PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。在数字安全领域,加密算法扮演着至关重要的角色。它们确保了信息的机密性、完整性和不可否认性。RSA算法和椭圆曲线算法(ECC)是当前最广泛使用的两......