使用 MSAL 保护 Azure Function API

e2e*_*Dev 3 azure azure-active-directory azure-web-app-service azure-functions

我有 Azure Functions,我想使用访问令牌进行身份验证。

我设置了以下内容

  1. Angular SPA 使用 Azure 应用程序对用户进行身份验证
  2. 用于调用图形 API 的访问令牌,权限在 Azure 应用程序中设置(第 1 点)
  3. Azure Function 具有 SPA 使用的 http 触发器 (API)

目前,API 是匿名的,可以从任何地方调用。我想使用图形 api 使用的访问令牌来保护这些 api(第 2 点)

我认为对我来说最好的方法是 AAD 多租户身份验证。但是,当我单击“身份验证(经典)”时,它给了我This app is configured using the new authentication experience. Click here to access Authentication (preview).

目前,我将身份验证保留为“允许未经身份验证的请求”

另外,如果我使用以下选项保持身份验证,我会得到"You do not have permission to view this directory or page." error

在此输入图像描述

我在网上找到的大多数文章都在谈论 AAD。对我来说该选项未启用。

我尝试过遵循以下文章来使其发挥作用,但不知何故它没有发生。谁能建议一下。我怎样才能做到这一点。

https://medium.com/medialesson/protecting-azure-function-apps-with-azure-ad-authentication-authorization-fd167ce4fe33

https://medium.com/geekculture/easyauth-in-functions-app-with-azure-active-directory-29c01cad8477

我需要在现有的 Azure 应用程序中执行某些操作才能使其正常工作吗?

Sta*_*ong 6

根据我的理解,您的 Azure 函数受 AAD 使用身份验证(轻松身份验证)的保护。现在,您的 Angular SPA 想要访问此功能。请按照以下步骤操作:

  1. 例如,转到 Azure AD => 应用程序注册 => 您创建的用于保护 Azure 功能的应用程序 => 公开 API 以添加范围,access_as_user以便您的 SPA 可能需要此范围的访问令牌:

在此输入图像描述

  1. 转到 Azure AD => 应用程序注册 => 您为 SPA 应用程序创建的应用程序 => API 权限 => 添加权限 => 我的 API 以授予我们刚刚创建的范围:

在此输入图像描述 在此输入图像描述

单击授予管理员同意按钮以完成该过程。

  1. 在您的 SPA 应用程序中,使用MsalService获取范围为: 的访问令牌api://<your azure function app id>/access_as_user,通过此令牌,您可以访问您的 Azure 函数。为了快速测试,我只是在 post man 中测试它,它工作得很好:

不使用此访问令牌

在此输入图像描述

带上此访问令牌 在此输入图像描述

更新

基本上,您的应用程序请求图如下:

SPA(带有访问令牌的请求)==> Azure函数的轻松身份验证(验证令牌,如果通过,则进入Azure函数代码逻辑,如果没有,返回401)==> Azure函数的代码逻辑(获取访问令牌的obo流程对于 Graph API) ==> 调用 Microsoft Graph API

到目前为止,我们已经完成了步骤 1 和 2:获取用于简单身份验证的访问令牌并将简单身份验证传递到 Azure 函数代码逻辑。

所以在Azure函数代码逻辑中,我们需要做两件事:

  1. 获取请求头中的访问令牌
  2. 使用访问令牌和 OBO 流为 Microsoft Graph API 交换新的访问令牌。只需参考下面的请求即可使用OBO 流交换 Microsoft Graph API 的访问令牌: 在此输入图像描述

顺便说一句,请确保您的 Azure 函数应用程序已获得许可user.read并且Calendars.Read

在此输入图像描述

这样您就可以获得新的访问令牌来调用 Microsoft Graph API: 在此输入图像描述