如何解决Api网关中的用户授权
我正在尝试了解微服务的架构,但我有一个问题,即如何在 Api 网关中正确授权用户或检查其是否存在(如果我有单独的用户服务用于注册、登录和令牌颁发)。 假设我有两个服务:一个用于注册、登录和接收令牌的用户服务和一个订购服务。他们有自己的数据库。
我有猜测:
- 对于 api 网关的每个请求,向授权服务发出单独的请求并检查那里的令牌和用户角色,然后才将请求重定向到订单服务。
- 为 Api 网关提供访问用户数据库的权限以验证令牌和用户,然后将请求重定向到订单服务
- 结合 Api Gateway 和用户服务(我认为这是一个坏主意)。
或者有更好的猜测吗?
解决方法
我认为你有很多方法可以做到这一点。
我可以告诉您如何使用 AWS 中的无服务器架构来做到这一点(就像我正在做的那样):
您可以创建服务 (lambda)、配置 JWT 授权方(API 网关),并将授权方用于您的函数,并可以选择为每个函数定义所需的权限(范围)。无需任何自定义代码即可完成。
here 你可以看到关于它是如何工作的更好的解释
您还可以编写自己的授权方函数,用于验证请求。
附言API Gateway 可以缓存结果,因此您无需为每个请求都调用授权方。
不知道你是想自己管理基础设施还是使用云提供商的一些服务,但我认为它至少可以给你一个关于如何设计这种东西的线索。
,我会做一些假设,并说您在谈论 JWT 令牌并且授权是使用 OAuth2 完成的。
在用户身份验证完成后,经过一些步骤,用户最终将拥有 JWT 令牌。这个 JWT 令牌包含 3 个部分,其中之一是签名。这个签名是加密的,没有密钥就无法解密,而 JWT 的其余内容是纯文本。令牌的内容连同签名在授权服务器上使用密钥进行签名。任何拥有密钥的人都可以阅读该消息。此密钥也是识别令牌发行者的一种方式。这样你就可以说你信任这个令牌,因为它是由你信任的人发出的。未重新加密的令牌中的任何更改都将导致令牌无效。令牌还包含授权/特权。
请注意,提到的“密钥”可能因加密算法而异。
基于此,您无需针对数据库用户检查每个请求。
为了更好地理解,请查看 OAuth2 协议(可能还有 OIDC)。
还有https://www.taithienbo.com/how-can-you-trust-a-jwt-to-be-authentic/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。