无法通过 Easy Auth (403) 刷新 AD access_token

Unable to refresh AD access_token through Easy Auth (403)

我似乎无法弄清楚在为应用服务设置 Azure Easy Auth 时哪里出错了:

我有一个使用 Azure Easy Auth(以 Azure AD 作为提供者)并打开令牌存储的应用程序服务。当我访问我的应用程序时,系统会提示我登录。登录后,我可以访问 /.auth/me,并且可以看到 access_tokenrefresh_token。大约 60 分钟后,access_token 过期。 Microsoft docs 说明我所要做的就是调用 /.auth/refresh 生成一个新的 access_token。这对我不起作用 - 我收到 403 拒绝访问。

我的范围确实包括 offline_access,我正在 /.auth/me 中检索 refresh_token,但刷新将不起作用。自登录以来,它也没有被撤销。烦人的是,我找不到任何应用程序日志来告诉我为什么会失败(我已经打开了所有东西,但我是 运行 一个在后台使用 PM2 的 Node js 应用程序,并且似乎没有从 Easy Auth 模块记录任何内容?)。

更奇怪的是,我可以使用 OAuth 端点(POST 到 https://login.microsoftonline.com/)手动检索新令牌,因此我认为令牌存储中的任何令牌都没有任何问题.

这可能是什么原因造成的?我该如何调试它?

编辑:通过一些测试,这似乎是由我的登录参数中的额外范围引起的。我的应用程序需要这个范围,但删除它似乎可以解决问题。我假设它无法刷新令牌,因为另一个范围不支持它?我需要执行哪些更新才能允许在此自定义范围上刷新令牌?

"loginParameters": ["scope=openid profile email offline_access api://xxx-xxx-xxx/user_impersonation"]

当您的提供商的访问令牌过期时,如果您仍然想使用该令牌,您需要先对用户进行重新验证再次使用该令牌。为此,您需要向名为 microsoft.web 的 Azure 资源管理器提供程序授予必要的权限,即 READ/WRITE在您订阅相关资源组中的资源中。

您可以按照以下步骤操作:

  • 转到 Microsoft:在 https://resources.azure.com 在页面顶部,select Read/Write.

  • 在左侧浏览器中,导航至 订阅 > 资源组 > > 提供商 > Microsoft.Web > 站点 > > 配置 > authsettingsV2.

  • 单击“编辑”。

  • 修改以下属性.

     "azureActiveDirectory": {
       "login": {
         "loginParameters": ["scope=openid profile email offline_access"]
       }
     }
    }
    
    
  • 点击放置。

有关详细信息,请参阅此 MICROSOFT 文档Work with OAuth tokens in Azure App Service authentication

要解决此问题,我必须将应用注册的 API 范围添加到应用注册的“授权客户端应用程序”中: