本机云应用程序是为云计算环境开发的应用程序。
对于“ 什么是云原生应用程序 ”这个问题没有具体答案,但是必须满足不同的概念。
在我看来,最重要的功能之一就是能够快速缩放 。 这意味着我们的应用程序在每台服务器上都无法具有任何状态,因为如果一台服务器宕机或规模缩小,那么存储在该服务器中的状态将丢失。
https://www.youtube.com/watch?v=osz-MT3AxqA对此进行了很好的总结,并以购物车示例进行了说明。 在整体方法中,您将购物车的产品存储在服务器会话中,如果服务器出现故障,则购物车的所有产品也会丢失。 在云原生应用程序中 ,可以快速扩展和缩减服务器实例,重要的是不要在服务上具有这种有状态的行为,而应将它们设计为无状态。
有多种方法可以实现实现无状态体系结构的目标,但可以将它们概括为两类:
- 使用分布式内存键/值数据存储,例如Infinispan。
- 使用令牌,该令牌用作客户端和服务器之间的会话 ,例如使用JWT 。
在本文中,我将向您介绍后面的方法。
从https://jwt.io/introduction/网站:
JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。
由于此信息是经过数字签名的,因此可以被验证和信任。 可以通过使用HMAC的机密或使用RSA的公/私钥对对JWT进行签名。
JSON Web令牌包含三个由点分隔的Base64Url字符串,它们是:Header.Payload.Signature
因此,使用JWT在后端实现无状态架构的基本思想是下一个:
- 当用户添加第一个产品时,后端服务将生成一个添加了产品的新JWT令牌,并将其发送回前端。
- 当用户添加新产品时,它将发送要添加的产品以及后端发送的JWT令牌。
- 然后,后端验证令牌是否尚未修改(验证签名),然后从先前添加的JWT有效负载中获取产品,并将新的产品添加到列表中。 最后,它使用以前的产品和新产品创建一个新令牌,并将其发送回前端。
- 始终重复相同的过程。
如您所见,现在无需维护任何状态或在后端添加任何新的数据库服务,您只需要发送和转发JWT令牌以及内部产品。
我录制了一个简单购物车示例的视频,其中演示了该解决方案的无状态本质。 可以在以下位置看到:
另外,如果您想检查我用于录制的项目,可以查看https://github.com/lordofthejars/shop-jwt 。
注意,这只是一个简单的文章,因此您可以了解基本思想。 但是您需要考虑在生产中使用它的下一步操作:
- 使用HTTPS代替HTTP
- JWT只是对令牌进行签名,如果您除了HTTPS之外还需要其他保护,请使用JWE来加密JWT令牌的有效负载。
- 对令牌进行指纹识别,以避免任何中间人攻击,并将这些参数用作令牌的身份验证参数。
- JWT也可以用于传递身份验证和授权内容。
您可以在JavaZone上观看我的演讲,其中介绍了其中一些技巧:
使您的REST服务免受攻击– Vimeo上 JavaZone的 Alex Soto Bueno
JWT方法的优点在于,它极大地简化了服务的部署,您无需部署或配置任何其他分布式数据库即可在整个群集中共享内容,从而将与网络通信所需的问题最小化分布式数据库或任何节点的配置错误。
缺点是客户端需要知道接收和发送回令牌并进行处理。 在后端,您需要一直签名并验证每个令牌。
翻译自: https://www.javacodegeeks.com/2018/01/cloud-native-applications-jwt.html