如果我们已经在.Net Core微服务API网关中实现了授权,是否还需要在所有微服务中实现?

时间:2019-02-11 13:12:37

标签: azure authentication asp.net-core microservices api-gateway

@这里,请帮助我了解如何使用API​​网关进行微服务身份验证。

让我们举个例子-我有10种不同的独立部署的微服务,并且我为所有这些微服务实现了API网关,这意味着所有请求都将通过该网关传递,而不是在我添加的每个微服务中添加授权/ JWt使用这种方法的API网关都可以正常工作,但是我的疑问和疑问是

1如果最终用户拥有已部署的微服务的URL并尝试在没有网关的情况下进行连接(由于我在此处没有授权位置,该如何停止它,我是否需要在其中添加相同的授权逻辑)每个微服务也是如此,但是最终将导致代码重复,那么API网关的用途是什么。

让我知道是否需要其他输入,希望我能正确解释我的问题。

谢谢
CP Variyani

2 个答案:

答案 0 :(得分:4)

通常来说:您的微服务将是内部的或公共的。换句话说,它们是外部世界无法达到的。如果它们是内部的,则可以选择不对其进行保护,因为保护基本上来自防火墙。如果它们是公开的,则无论是否直接使用它们,都应要求进行身份验证。

但是,通常最好只要求始终进行身份验证,即使它们仅是内部身份验证也是如此。使用客户端身份验证和范围很容易,以确保只有您的应用程序才能访问服务。然后,如果出现某种形式的配置错误,导致服务泄漏到外部网络(即Internet),或者在防火墙中打开了一个漏洞,那么您仍然会受到保护。

答案 1 :(得分:1)

API网关用于处理交叉问题,例如“授权”,TLS等,以及服务的单入口点。

出现您的问题,如果您的API服务公开供公众访问,那么您必须对其进行保护。通常,API网关是唯一公开的地方,其余服务位于仅可以通过API网关访问的防火墙(虚拟网络)之后,除非您有某些理由公开公开您的服务。

例如如果您使用Kubernetes进行服务部署,则可以将服务设置为仅在集群内部可以访问(服务具有私有IP),并且访问它们的唯一方法是API网关。那时您不需要做任何特别的事情。 但是,如果您的服务由于任何原因被公开(具有公共IP),那么您必须对其进行保护。简而言之,这取决于您如何部署它们以及它们是否具有与之关联的公共IP。

根据您在下面的评论。您应该在API网关中进行身份验证,然后将请求中的令牌传递给服务。您的服务将仅对令牌进行身份验证,而不会重做整个身份验证。这样,如果您要更新/更改身份验证提供程序或流程,则将其保存在API网关中会更容易。