如何在一台服务器上拥有多个Azure用户信息?



我正在开发一个API,当用户通过azure-cli登录到azure时调用订阅和租户信息。

用户登录CSP(内部使用az login --use-device-code登录CSP)时,会收到urlhttps://microsoft.com/devicelogin和秘码。

完成此过程后,用户的登录信息将留在我们的主服务器上,并且可以使用此调用用户的订阅和租户信息。

在单个用户的情况下,这个过程完全没有问题。但是,当多个用户同时发出请求时,只调用最后发出请求的用户的信息。

此外,另一个问题是主服务器的进程被阻塞,直到通过azure-cli请求进程完成。

当多个用户请求CSP登录时,如何在不阻塞主服务器、不覆盖用户信息的情况下正常运行?

作为参考,主服务器是FastAPI。

根据您所解释的,看起来您有一个快速的api服务器,它暴露了用户用于登录的api。来自api的响应将是设备登录url和客户端要使用的设备代码。所有后续调用将使用此信息完成。

所以现在第一个问题是主线程问题,在进程完成之前api不应该被阻塞。

为此,您需要异步api,它执行后台作业并在任务完成时通知用户,或者用户可以定期请求信息,直到作业状态发生变化。

这意味着我们需要修改我们的fastapi服务器,使其能够执行多线程,队列任务和一些查找缓存。

我建议最好的方法是有一个fastapi堆栈与以下库:

  • 芹菜——一个异步任务管理器,允许您运行和管理队列中的作业。
  • RabbitMQ -一个消息代理,用于在任务工作者和芹菜之间进行通信
  • Redis -一个内存缓存(键值存储),用于存储和检索值。

你可以使用相同的Redis缓存来解决你的第二个问题,你需要存储和使用多个会话信息而不覆盖。这将帮助您处理多个会话信息或多个用户信息。

请看看下面github上的一些示例项目:

jjpizarro/fastapi-celery-1

CloudNua/fastapi-celery

最新更新