Ral*_*lph 3 authentication java-ee microservices
有关微服务架构的讨论很多.我缺少的 - 或者我可能还没有理解的是,如何解决安全性和用户身份验证的问题?
例如:我开发了一个微服务,它为工作流引擎提供Rest服务接口.该引擎基于JEE,可在GlassFish或Wildfly等应用程序服务器上运行.工作流引擎的核心概念之一是,每个调用都是以用户为中心的.这意味着根据当前用户的角色和访问级别,工作流引擎生成单独的结果(例如,以用户为中心的任务列表或处理打开的任务,这取决于过程中的用户角色).
在我看来,无法从任何地方访问服务.例如,如果有人计划实现一个基于Ajax的现代JavaScript应用程序,该应用程序应使用工作流程微服务,则存在两个问题:
1)为了避免JavaScript/Ajax的跨脚本问题,需要在与微服务运行相同的域下部署JavaScript Web应用程序
2)如果微服务强制进行用户身份验证(在我的场景中就是这种情况),则应用程序需要提供透明的身份验证机制.
如果客户端需要访问多个以用户为中心的微服务来强制进行用户身份验证,则情况会变得更加复杂.我总是最终得到一个架构,其中所有服务和客户端应用程序在同一域下的同一应用程序服务器上运行.
如何解决这些问题?这种架构的最佳实践是什么?
简短回答:检查OAUTH,并在每个需要访问其他微服务的微服务中管理凭证缓存.通过"管理"我的意思是,小心安全.特别是,请注意谁可以访问这些凭据并让网络拓扑成为您的朋友.创建一个DMZ图层和其他内部图层,反映您的微服务的依赖关系图.
答案很长,继续阅读.你的问题是一个很好的问题,因为尽管你的问题非常复杂,但没有简单的银弹来做你需要的东西.
就像我到目前为止看到的与微服务相关的一切一样,没有什么是新的.每当您需要让分布式系统代表某个用户执行操作时,您需要分布式凭据才能启用此类解决方案.自大型机时代以来,这是正确的.没有办法违反这一点.
从某种意义上说,自动SSH就是这样的事情.也许它听起来像是一种描述简单事物的美化方式,但最终,它使一台机器中的流程能够在另一台机器中使用服务.
例如,在网格世界中,Globus Toolkit使用以下内容建立分布式安全性:
OAUTH可能就是您所需要的.这是一种提供额外限制的授权方式.例如,假设某个用户对某个服务具有读写权限.当您发出OAUTH授权时,您不一定向第三方授予完全用户权限.您只能提供读取权限.
另一个答案中提到的CORS在终端客户端(通常是Web浏览器)需要跨网站单点登录时非常有用.但似乎您的问题更接近于您拥有许多由您管理的微服务的群集.不过,您可以利用Grid字段开发的解决方案来确保跨站点分布的集群的安全性(例如,出于高可用性原因).
完全安全是无法实现的.因此,如果凭证永久有效,或者如果您没有采取足够的谨慎措施以使其对收到它们的任何内容保密,那么这一切都没有用.为此,我建议使用图层对网络进行分区.每层都有不同程度的保密和暴露于外界.
如果您不希望负担具有允许OAUTH所需的基础结构,则可以使用基本HTTP或创建自己的令牌.
使用基本HTTP身份验证时,客户端需要在每个请求上发送凭据,因此无需在服务器端保留会话状态以进行授权.
如果要创建自己的机制,请更改登录请求,以便返回令牌作为成功登录的响应.具有相同令牌的后续请求将充当基本HTTP身份验证,其优点在于,这发生在应用程序级别(与基本HTTP身份验证中的框架或应用程序服务器级别相反).
| 归档时间: |
|
| 查看次数: |
1702 次 |
| 最近记录: |