我有一个托管在 Azure 静态 Web 应用上的 Vue 网站。它不通过 Azure Functions 使用受支持的 API 端点。我们的后端 API 托管在应用服务上,并且通常放置在与 ExpressRoute 对等的 VNET 中以访问本地资源。
由于我们不希望互联网上的任何人在应用服务 (example.azurewebsites.net) 上调用我们的 API,因此我们将它们放在 APIM 基本层后面,并设置访问限制以仅接受来自 APIM IP 的连接。
由于这是一个静态 Web 应用程序,我们必须将 APIM 订阅密钥放置在代码中,以便每个人都可以看到。通常,我们会通过 Microsoft 身份平台实施 Azure AD 身份验证,以对我们的应用程序的用户进行身份验证(隐式授权流或身份验证代码流)。此过程接收access_token包含我们可以在应用程序中使用的用户信息(例如姓名和电子邮件)。这样做的副产品是我们可以access_token使用标头将其传递给 APIM Authorization,APIM 可以自动验证此令牌,因此应用程序可以调用我们的 API。
我们正在评估Azure Static Web Apps中内置的身份验证和授权功能,希望用户身份验证开发能够更加轻松快捷。这确实更容易,我们只需将用户重定向到/.auth/login/aad,一切都由应用程序处理。然而,当我们检查的响应时/.auth/me,它仅显示identityProvider、userId和。userDetailsuserRoles
如果我们使用此身份验证功能,我们如何对 APIM 调用进行身份验证?没有access_token收到。
另一件事是,由于userDetails在本例中我们仅收到电子邮件地址,因此我们如何向 Microsoft Graph API 进行身份验证以获取用户的全名和其他信息?
我想要通过内置身份验证功能实现的目标是否可行?还是我们仍然需要自己实现身份验证?是否有任何解决方法可以避免我们自己实施此操作?使用内置的身份验证功能非常简单,前提是它也可以返回access_token …
azure single-page-application azure-active-directory azure-ad-msal azure-static-web-app
我在 Linux Azure 应用服务(计划 P1v2)上托管在 CodeIgniter 3 框架上编写的 PHP 7.2 网站。数据库是 MySQL 5.7,在 Azure Database for MySQL(通用,2vCores,5GB 存储)上运行,禁用 SSL。
当我浏览我的网站时,它实际上需要大约 8-9 秒的时间来加载浏览器将停留在白色页面并在加载完成后立即显示所有内容的地方。(大部分网站内容是从数据库中提取的)
我一直在监视应用服务和 MySQL 数据库,平均 %CPU 从未达到其分配资源的 50%,因此规格似乎不是问题。
我的外包开发团队有他们自己的测试环境(不在 Azure 上),他们说它几乎立即加载到他们的环境中,所以他们指责 Azure。
然后我注意到 Azure 顾问告诉我关于这个数据库的两件事,其中影响很大
改善 MySQL 连接延迟 我们的内部遥测表明您连接到 MySQL 服务器的应用程序可能无法有效地管理连接。这可能会导致更高的应用程序延迟。为了改善连接延迟,我们建议您启用连接重定向。这可以通过启用 PHP 驱动程序的连接重定向功能来完成。
改进 MySQL 连接管理 我们的内部遥测表明您连接到 MySQL 服务器的应用程序可能没有有效地管理连接。这可能会导致不必要的资源消耗和整体更高的应用程序延迟。为了改进连接管理,我们建议您减少短连接的数量并消除不必要的空闲连接。这可以通过配置服务器端连接池来完成,例如 ProxySQL。
我现在正在努力启用连接重定向以减少延迟,但仍然没有成功,因为我不熟悉 CodeIgniter,所以我需要等待开发人员修复它。
我的问题是:这个性能问题的原因是什么?这两个建议真的是这个问题的原因吗?
应用服务和数据库都在同一个区域。它们是否像某种 LAN 连接那样在本地进行通信?我希望来自 App Service 的连接不会通过 Internet 然后返回到 Azure DB,从而导致性能下降。
谢谢。