微服务的API授权

时间:2018-10-13 16:12:45

标签: c# api microservices

我有一个多租户项目,它将调用多个微服务来执行特定任务。

我希望微服务从发送的请求中了解要使用哪个数据库,因为每个租户都将使用微服务,但是,租户将拥有自己的数据库。我有另一个解决方案,它有一个处理API密钥管理的Web项目。

例如,假设API密钥管理位于以下域中:portal.example.com

当tenant.example.com在microservice.example.com上调用微服务时,我希望某些中间件在微服务端监听该请求并从请求中获取APIKey,然后通过检查portal.example.com服务来对其进行验证。如果APIKey有效,请抓住该API密钥的租户,并确定用于微服务的连接字符串。

我觉得这不太有效,因为它需要太多的调用才能确定要使用的连接字符串,有人能想到一种确定连接字符串但还要验证APIKey的更好方法吗?

1 个答案:

答案 0 :(得分:0)

问题的性质似乎需要更多有关某些业务决策和体系结构决策的信息。

但是,根据您到目前为止提供的信息,我想说的是,您引用的连接字符串也可能是数据泄漏的问题。假设授权服务中发送错误的连接字符串时出错,则可能会不小心将客户端连接到另一个数据库,而不是实际发出请求的客户端。第二点是,这也使授权服务成为单点故障。如果失败或恶意用户访问它,您的所有租户都会受到影响。

代替让体系结构处理此问题,可能值得评估的一件事是使用OAuth的客户端凭据来认证不同的应用程序;每个应用程序反映一组不同的数据库参数。在OAuth身份验证阶段,它将把用户重定向到正确的应用程序。总之,为每个租户部署了一组应用程序,其中通过OAuth对租户进行了身份验证。

另一种略有不同的选择是将用于一个租户的整个堆栈部署和复制到具有其各自数据库凭据的另一个租户。仅当您受到开发资源的限制时,我才主张这样做。