oauth-2.0 - 如何正确授权嵌套的微服务调用
问题描述
我想了解授权嵌套服务调用的最佳实践。场景是客户端调用一些服务A来执行一些操作。然后服务A需要代表用户调用另一个服务B,所以它调用服务B。服务A然后调用另一个服务C。我想要的是:
- 服务 B 能够对服务 A 发出的请求进行身份验证和授权
- 服务 C 能够对服务 A 发出的请求进行身份验证和授权
- 服务 C 能够防止服务 B 代表用户调用它
假设我想使用 OpenID Connect 令牌,支持上述 3 个要求的适当流程和令牌内容是什么?
解决方案
好问题和答案与数据领域和 OAuth 范围有关。
访问令牌被设计为在微服务之间传递,您不应该(默认情况下)每次 API 相互调用时都需要运行新的 OAuth 流,这会增加复杂性,从而导致多个问题。
相反,每个 API 都应该验证 JWT 并检查对该 API 数据区域有意义的范围和声明。
一个好的设计是确保以下几点:
- 互联网客户使用的令牌是保密的
- API 使用的令牌可以包含丰富的声明并被转发
有关更多信息,请参阅以下 2 篇文章:
关于你的第 3 点,那里有一个特权,它取决于场景 - 例如,它可能是贵公司的不同部门 - 在这种情况下,不同的令牌可能是有意义的。
大多数动态授权都应该使用声明 - 在上面的范围文章之后有一篇声明最佳实践文章。
推荐阅读
- python - 在 Python 中使用动态名称在 for 循环中创建多个列表
- git - 为远程存储库的所有分支的所有提交检索 Git 补丁
- sql - 组合来自 2 个表的数据并从其中 1 个表中旋转数据
- c# - AppDomain.GetCurrentThreadId(); 让它工作,不知道如何?
- activemq-artemis - 在 ActiveMQ Artemis 中进行过滤。在集群中重新加载配置
- emacs - 如何保持放大emacs rnw
- javascript - jquery 删除父 cur.element 的父级
- qr-code - TCPDF - 字母数字字符问题(大小错误)
- entity-framework - EF Core 2.1 值转换更新问题
- angular - 让 bootstrap-multiselect 与 Angular 2+ 一起工作