c# - 使用微服务进行 API 授权
问题描述
我有一个多租户项目,它将调用多个微服务来执行特定任务。
我希望微服务能够从发送的请求中了解要使用哪个数据库,因为每个租户都将使用微服务,但是,租户将拥有自己的数据库。我有另一个解决方案,它有一个处理 API 密钥管理的 Web 项目。
例如,API 密钥管理位于域:portal.example.com
当 tenant.example.com 在 microservice.example.com 调用微服务时,我希望一些中间件在微服务端监听请求并从请求中获取 APIKey,通过检查 portal.example.com 服务来验证它,如果APIKey 有效,获取此 API 密钥的租户并确定用于微服务的连接字符串。
我觉得这似乎效率不高,因为它需要太多调用才能确定要使用的连接字符串,谁能想到更好的方法来确定连接字符串,同时验证 APIKey?
解决方案
问题的性质似乎需要更多关于某些业务决策和架构决策的信息。
但是根据您迄今为止提供的信息,我想说您所指的连接字符串也可能是数据泄漏的问题。鉴于如果授权服务中存在发送错误连接字符串的错误,您可能会不小心将客户端连接到另一个数据库,而不是发出请求的实际客户端。第二点是它也使授权服务成为单点故障。如果它失败或恶意用户访问它,所有租户都会受到影响。
与其让架构处理这个问题,值得评估的一件事是使用 OAuth 的客户端凭据对不同的应用程序进行身份验证;每个应用程序都反映了一组不同的数据库参数。在 OAuth 身份验证阶段,它会将用户重定向到正确的应用程序。总之,为每个租户部署了一组应用程序,其中租户通过 OAuth 进行身份验证。
一个稍微不同的替代方案是使用各自的数据库凭据为另一个租户部署和复制您用于一个租户的整个堆栈。仅当您受到开发资源的限制时,我才会提倡这一点。
推荐阅读
- javascript - 我如何从收藏中获得第二个成员
- javascript - 我无法从我的 MongoDB 中删除任何内容
- html - 图片库上的多个 CSS 过渡
- python - 无法查询“Cast object (1)”:必须是“Person”实例
- reactjs - 从 React 组件状态中删除项目的最有效/传统方法是什么?
- android - 在没有身份验证的情况下获取设备 fcm 令牌(laravel)
- angular - 无法使用 Angular IDE 创建新项目
- bots - 不和谐机器人提到
- python - Tkinter - 单击按钮执行功能时返回导入模块的打印
- r - rlang:在 NSE 函数中使用冒号快捷方式从 ... 中获取名称