RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1051678
Accepted
Eladei
Eladei
Asked:2020-11-28 16:28:06 +0000 UTC2020-11-28 16:28:06 +0000 UTC 2020-11-28 16:28:06 +0000 UTC

微服务架构中的安全性

  • 772

情况:

有一个系统细分为以下上下文(使用战略 DDD 模式):

  1. 识别和访问的上下文(识别和授权)
  2. 某些对象的注册上下文
  3. 轮询上下文(用于获取有关已注册对象的信息)

基于指定的任务分工,我决定构建一个基于微服务架构的系统。

一个任务:

系统安全

问题:

基于上述背景,出现了如何维护这样一个系统的安全性的问题。在这种情况下,事实证明所有服务的标识和授权都位于一个节点中。在我看来,我的观点是:

  1. 这是不安全的——这个节点的故障会降低整个系统的安全性;
  2. 微服务变得不那么自主;

谁有搭建微服务架构的经验,请告诉我:这种情况下如何保证安全性更好?

безопасность
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Mark Shevchenko
    2020-11-28T17:47:48Z2020-11-28T17:47:48Z

    要开始,请查看一篇不错的四部分介绍性文章:

    • https://auth0.com/blog/an-introduction-to-microservices-part-1/
    • https://auth0.com/blog/an-introduction-to-microservices-part-2-API-gateway/
    • https://auth0.com/blog/an-introduction-to-microservices-part-3-the-service-registry/
    • https://auth0.com/blog/introduction-to-microservices-part-4-dependencies/

    另外,阅读有关十二因素应用程序的信息:

    • https://12factor.net/ru/

    我还推荐 Robert Martin 的“Clean Architecture”,即第 27 章,作者在其中写道,如果可能的话,微服务器代码组织的问题应该推迟到以后。微服务的时尚会过去,但代码可能会保留,所以它就是这样。

    关于你的具体问题。你把你的微服务隐藏在所谓的网关(gateway)后面,它执行授权、负载均衡和链接微服务的功能。通常,解决方案的结构是这样组织的,一个网关对应一个客户端应用程序——一个用于 Web 客户端,另一个用于移动客户端。

    因此,您开发了一个网关 - 本质上是相同的微服务 - 可从外部使用,并隐藏两个具有业务逻辑的微服务。单独设置认证服务。您可以使用可以使用 OAuth2 对用户进行身份验证的外部服务,例如 Google 或 Facebook。对于 .NET,有一个名为 IdentityServer 的半工厂解决方案。

    如果您担心可靠性,您可以将验证器的两三四份副本隐藏在平衡器后面。如果您担心数据中心会出现故障,请在不同的数据中心安装带有身份验证器的平衡器,并通过 Round robin DNS 分发请求。在实践中,这已经是多余的——当涉及到大型已完成项目时,需要做出这样的决定。

    验证器会给你access_token,可能在 JWT 标准中。处理 HTTP 请求标头的网关将从Authorization标头中提取此令牌,验证签名,并从那里获取用户 ID。

    在微服务内部,已经传递了用户 ID。相信用户是正确的,因为签名在统计上是不可能伪造的。

    带有访问令牌 (access token) 和刷新令牌 (refresh token) 的方案已经很好地证明了自己,在 OAuth2 标准中进行了描述,并且得到了工具性支持。假设同一个 IdentityServer 可以提供现成的令牌。

    • 4

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5