【发布时间】:2021-11-21 20:56:23
【问题描述】:
我有一个托管在一个 azure Windows 应用服务中的 Angular 应用和一个托管在另一个中的 asp.net 核心 api,两者都使用应用服务身份验证功能进行保护。我正在使用目前有两台服务器的应用服务计划。我正在使用令牌存储,它正在使用文件系统来存储令牌。
当 Angular 应用调用 api 时,它需要在授权标头中传递访问令牌。通过在 \.auth\me 端点上执行 GET 并将 AppServiceAuthSession cookie 作为凭据发送来检索访问令牌。然后将返回的令牌缓存在会话存储中并用于后续请求,直到令牌过期。当令牌过期时,我调用 \.auth\refresh 端点(并发送 AppServiceAuthSession cookie),然后调用 \.auth\me 以获取刷新的令牌。
这一切在一台服务器上运行时运行良好,但当应用服务计划扩展到 2 台或更多台服务器时,对 \.auth\refresh 的调用会成功,但随后对 .auth\me 端点的调用会获得一个令牌,该令牌具有已经过期了。我可以通过检查内部 exp 声明来判断令牌已过期,并且对 api 的调用在正常情况下会成功时失败并显示 401 Unauthorized。
如果我缩减到一台服务器,问题就会消失,如果我启用 ARR 亲和性,问题就会消失,但我不想为了解决这个问题而启用亲和性。
【问题讨论】:
标签: azure-active-directory azure-web-app-service access-token azure-appservice