如何正确使用快速网关对 Web 应用程序进行身份验证?

How to properly use express-gateway for authentication of a web app?

总体而言,我对微服务和 api 网关的概念相当陌生。我试图了解 api 网关在使用许多微服务的现代 Web 应用程序中扮演的角色。我一直在阅读 express-gateway 的文档和教程,但对 Web 应用程序如何使用像 express-gateway 这样设置的 api 网关执行身份验证感到有点困惑。

我的 Web 应用程序将有多个微服务与之对话。我认为在我所有的微服务前面放置一个 API 网关可以做到这一点,这样每个微服务就不必担心 user/request 是否经过身份验证,因为如果正在与微服务通信这意味着 api 网关已验证该请求是有效用户。我的理解正确吗?

假设我认为 api 网关作为其他微服务的看门人是正确的,我的后续问题是关于它如何执行的细节。

这是否意味着所有用户创建和身份验证都由 api 网关执行?这意味着我将没有自定义用户 creation/login 微服务?或者我是否可以通过 api 网关自定义用户创建微服务公开访问该微服务,该微服务在创建时会在 api 网关内创建用户帐户?用户信息现在是否被我的微服务复制到某处的数据库和快速网关自己的存储中?我想我一般的困惑是 api 网关是否完全脱离 Web 应用程序自己的微服务来承担 authentication/user 创建的角色,还是您仍然需要这两个部分?

我认为我自己的身份验证微服务会首先验证用户,然后使用 api 网关生成有效的短期令牌,但阅读有关在 express-gateway 中创建用户或应用程序帐户以进行身份​​验证的内容有让我对每个角色都感到困惑。

要了解 API 网关在基于微服务的解决方案中的作用,我建议您看一下 presentation 我几个月前做的。这应该会澄清一些事情。

Is my understanding of this correct?

是的,你明白了。如果您看过视频,您实际上也可以在实践中看到这个概念。

对于存储,这取决于。

Express Gateway 提供身份服务的子集,例如用户、应用程序和凭据。它们足以满足大多数应用程序的使用,但您可能会发现自己需要使用外部服务,例如 Auth0。

现在,撇开功能不谈——将数据存储在何处,由您决定。您可以将部分数据保存在 Express Gateway 中,将部分数据保存在您自己的数据库中 — 或者完全保存在 Express Gateway 中。这里没有好的或坏的策略。