【问题标题】:Suggestion about system arcitecture关于系统架构的建议
【发布时间】:2019-03-22 08:59:51
【问题描述】:

我对系统架构有一些疑问。我正在建立一个票务系统。基本上,它正在创建支持票。

我想弄清楚我是否以正确的方式使用了这些组件。

关于第一种情况:

客户端请求创建一个新的票,网关将请求转发给票务服务,票务服务想要检查令牌是否有效,因此通过带有令牌的nats抛出一个发布,如果令牌是有效的身份验证服务注册令牌和信息使用 Redis 的键值对一段时间让我们说 30 分钟。并将结果发布给 nats。 Nats 将结果重定向到票务服务。如果一切正常,票务服务会在数据库中创建一条记录。

第二种情况是:

用户再次执行上述所有步骤,但是,身份验证方面,而不是要求身份验证服务从 Redis 获取信息(如果存在)并再次执行相同的步骤。

这是我的问题,

您认为 Redis 用于正确的目的吗?还是我应该删除它并在请求进行身份验证时一遍又一遍地询问?

您认为我应该在网关上进行所有身份验证吗?

所以看起来与上述问题相关。

在初始登录和请求时。 (第一种情况)

登录后,(第二种情况)

非常感谢您的建议、批评和 cmets。

提前谢谢你。

【问题讨论】:

    标签: service redis architecture microservices


    【解决方案1】:

    更正确的方法是从 API 网关进行身份验证,即。 API 网关使用身份验证服务进行身份验证,如建议的两种解决方案的第二个选项中所述。

    API 网关应证明是您所有请求的“网关”,并过滤任何未经身份验证或授权访问您的服务的请求。在这种情况下,身份验证和授权可以是它们自己的服务,API 网关将使用该服务来确定请求是否可以访问任何其他下游服务。除此之外,它还通过删除 NATS 消除了复杂性。少一个组件来操作和管理总是一种胜利。

    我要做的一个小改动是,在第二步中,我会让身份验证服务检查 Redis,而不是 API 网关直接连接到 Redis。也就是说,认证服务会先去Redis,然后再去数据库。这样一来,脱钩就更多了。

    API 网关不需要知道身份验证服务如何在 Redis 中存储令牌的密钥。因此,如果您决定更改密钥在身份验证服务中的应有方式,则无需针对 API 网关中从 Redis 读取密钥的方式有效地部署新的更改。

    【讨论】:

    • 您好,威尔,非常感谢您的回复。似乎是合理的变化,但有一件事是,你认为 redis 是存储令牌的有效方式吗?我想我会将令牌放置 30 分钟,30 分钟后,身份验证服务将重新生成令牌,并推送 redis,在接下来的 30 分钟内,它将使用 redis 检索密钥,而不是使用数据库。另一方面,我在想,查询将非常特别,所以也许 db 可以单独处理它。我不确定我是否将 redis 用于真正的目的。
    • 一些注意事项,如果你没有很多负载,你可能不需要使用 Redis,尽管你可以使用 Redis,因为它们具有自动过期缓存的 TTL 功能。我不确定 SQL 数据库中是否存在等价物。为了解决另一个问题,我会说身份验证服务不应该自动刷新令牌,如果这就是你的意思。这涉及到更多的复杂性,并且很容易陷入允许用户永远访问的安全陷阱。
    • 谢谢你的建议,我现在更清楚了:)
    猜你喜欢
    • 2011-07-16
    • 2014-02-03
    • 2012-03-09
    • 1970-01-01
    • 2017-01-20
    • 2016-07-10
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多