【问题标题】:Authorization check in different microservices不同微服务中的授权检查
【发布时间】:2021-01-07 19:56:45
【问题描述】:

我决定第一次尝试实现微服务架构而不是单体架构,但遇到了授权问题。 在单体架构中,当访问挂起 [Authorize] 属性的控制器时,我只是在标头中传递了令牌,并根据当前的单个数据库对其进行检查。但是在微服务架构中,每个微服务都有自己的数据库,访问其他微服务的时候怎么查token,听说API网关里面有查的实现,不过我觉得,反正每个微服务都应该有自己的检查,因为如果用户未经授权,则不应访问 api。 我应该使用api网关向授权微服务发出请求进行验证吗? 我该如何实现?

我有一个用于用户授权(注册、登录、令牌发行)的单独微服务,它有一个带有令牌的用户数据库。 也就是说,我需要使用 API Gateway 向这个微服务发出请求吗?

【问题讨论】:

    标签: c# asp.net-core .net-core authorization microservices


    【解决方案1】:

    一种方式—— 您应该尝试在 API 网关级别进行身份验证/授权。每当任何 API 调用到达需要某些权限的 API 网关时,请检查令牌。如果访问/令牌不存在,则返回 401。在前端,如果您得到 401,则在 UI 上进行身份验证。

    第二条路 - UI 将令牌传递给 API 网关,API 网关将进一步将令牌发送给其他微服务。

    这取决于您需要多大级别的权限。如果它处于非常精细的水平,则选择第 2 次,否则选择第 1 次。

    【讨论】:

    • 我有一个单独的用于用户授权(注册、登录、颁发令牌)的微服务,它有一个带有令牌的用户数据库。也就是说,我需要使用 API Gateway 向这个微服务发出请求,还是什么?
    • 每当 UI 与授权服务以外的任何其他微服务交互时,它都应该通过 API 网关和 API 网关来使用授权服务来验证令牌。 (第一种方法更好)
    • 好的,谢谢解释,但是我很担心一件事,原来我需要让微服务的api完全可访问,以便api网关验证后可以引用它们,但是如果有人试图绕过api网关直接访问微服务的api如何限制访问?
    • 仅向 API 网关提供公共 IP 或 DNS。所有其他服务应该只有私有 IP。我们在我的一个项目中使用了 Kubernetes,并且 NGINX 可以从外部访问,并且仅将流量转发到 Kubernetes 侧的网关。
    • 供您参考-github.com/dotnet-architecture/eShopOnContainers-“这是.NET中微服务实现的一个很好的例子。
    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 2017-12-09
    • 2020-09-27
    • 2018-03-09
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多