如何跨不同web应用实例共享Azure移动服务令牌

如何跨不同web应用实例共享Azure移动服务令牌,azure,azure-mobile-services,access-token,Azure,Azure Mobile Services,Access Token,我计划拥有多个azure移动服务实例,因此我的第一个要求是在不同的应用程序实例之间共享经过身份验证的用户的访问令牌。我发现这篇文章指出,现在我们不能共享令牌,因为它存储在机器上的本地位置,不建议将其放置在blob存储中用于生产应用程序。目前我有什么可能的解决方案?我已经阅读了您提到的关于App Service Token Store的文章。如前所述,代币的存放位置: 在内部,所有这些令牌都存储在应用程序的本地文件存储中,位于D:/home/data/.auth/tokens下。令牌本身都在特定于

我计划拥有多个azure移动服务实例,因此我的第一个要求是在不同的应用程序实例之间共享经过身份验证的用户的访问令牌。我发现这篇文章指出,现在我们不能共享令牌,因为它存储在机器上的本地位置,不建议将其放置在blob存储中用于生产应用程序。目前我有什么可能的解决方案?

我已经阅读了您提到的关于App Service Token Store的文章。如前所述,代币的存放位置:

在内部,所有这些令牌都存储在应用程序的本地文件存储中,位于D:/home/data/.auth/tokens下。令牌本身都在特定于用户的.json文件中使用特定于应用程序的加密密钥进行加密,并按照最佳实践进行加密签名

我发现这篇文章指出,现在我们不能共享令牌,因为它存储在本地机器上

正如Azure Web应用程序可以处理的持久化文件所述:

它们以d:\home为根,也可以使用%home%环境变量找到

这些文件是持久性的,这意味着您可以依赖它们一直保留在那里,直到您做些什么来更改它们。此外,它们在站点的所有实例之间共享(当您将其扩展到多个实例时)
。在内部,这种工作方式是将它们存储在Azure存储中,而不是存储在本地文件系统中

此外,Azure应用程序服务将启用ARR亲和性,以保持客户端后续请求与同一实例通信。您可以禁用会话关联cookie,然后请求将分布在所有实例中。有关更多详细信息,请参阅此

此外,我已尝试禁用ARR关联功能,并将我的移动服务扩展到多个实例,然后我可以始终通过浏览器检索有关当前登录用户的信息


据我所知,您可以自己完成身份验证/授权,以便在应用程序中使用auth中间件。但是,这需要做更多的工作。由于平台为您提供服务,我认为您可以利用Easy Auth和Token Store将移动服务扩展到多个实例,而无需担心任何问题。

感谢Bruce,在上面的问题中,我提到了多个实例,我指的是跨不同地区的多个azure移动服务实例,例如一个在亚洲,一个在欧洲,另一个在美国,并使用azure traffic manager将请求定向到最近的实例,因此如果来自印度的用户尝试调用我的api,它会被重定向到欧洲实例(例如,当我在亚洲地区更新服务器时),由于其令牌存储在本地的Asia server上,当请求发送到Europe server时,如果您担心更新服务器时无法访问实例,它将根据您的最新情况拒绝请求,在与生产插槽交换之前,您可以利用在临时部署插槽中设置开发环境并验证应用程序更改。或者,您需要将身份验证服务构建到应用程序中,并将用户登录信息(例如提供商、访问令牌等)存储到共享存储(例如)中,以获得更高的性能。此外,您还可以参考这一点。Azure存储对于一个区域内的所有规模单位都是通用的。因此,如果您有两个地区—一个在美国西部,一个在美国东部,那么您就有两个Azure存储帐户和两个令牌缓存。ARR Affinity将确保您的用户始终使用正确/相同的区域服务。感谢Bruce和Adrian。我认为这不能解决我的问题。假设我首先在美国地区添加了我的应用程序,那么来自亚洲和欧洲的人仍将使用该应用程序,因此他们将连接到美国地区,然后,如果我的用户群在亚洲和欧洲增长,我会将该应用程序部署到亚洲和欧洲地区,Azure Traffic manager会将他们转移到他们所在位置附近的应用程序,因为他们的令牌存储在我的美国地区机器上,所以他们将得到身份验证错误。我得到的是,如果您使用的是Azure移动服务,请纠正我的错误