使用 MSAL 保护 Azure 函数 API
Secure Azure Function API with MSAL
我有 Azure Functions,我想使用访问令牌对其进行身份验证。
我设置了以下内容
- Angular SPA 正在使用 Azure 应用程序对用户进行身份验证
- 用于调用图形 API 的访问令牌,权限在 Azure 应用程序中设置(第 1 点)
- 具有 SPA 使用的 http 触发器 (API) 的 Azure 函数
目前,API 是匿名的,可以从任何地方调用。我想使用图 api(第 2 点)
使用的访问令牌来保护这些 api
我认为对我来说最好的方法是 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/geekculture/easyauth-in-functions-app-with-azure-active-directory-29c01cad8477
我需要在我现有的 Azure 应用程序中做些什么才能使其正常工作吗?
据我了解,您的 Azure 函数受 AAD 使用身份验证(简单身份验证)保护。现在,您的 angular SPA 想要访问此功能。请按照以下步骤操作:
- 转到 Azure AD => 应用程序注册 => 你创建的应用程序来保护你的 Azure 功能=> 公开一个 API 来添加一个范围,例如
access_as_user
这样你的 SPA可能需要此范围的访问令牌:
- 进入 Azure AD => 应用注册 => 您为 SPA 应用创建的应用 => API 权限 => 添加权限 => 我的 API 授予我们的范围刚刚创建:
单击授予管理员同意按钮以完成该过程。
- 在您的 SPA 应用程序中,使用
MsalService
获取范围为:api://<your azure function app id>/access_as_user
的访问令牌,通过此令牌,您可以访问您的 Azure 函数。为了快速测试,我只是在 post man 中测试它并且它完美运行:
不使用此访问令牌
带上这个访问令牌
更新
基本上,您的应用程序请求图如下:
SPA(request with access token)==> Azure函数的Easy Auth(validate token,如果通过,进入Azure函数代码逻辑,如果没有,return 401)==> 的代码逻辑Azure 函数(obo 流获取 Graph API 的访问令牌)==> 调用 Microsoft Graph API
至此,我们已经完成了第 1 步和第 2 步:获取 easy auth 的访问令牌并通过 easy auth 进入 Azure 函数代码逻辑。
所以在Azure函数代码逻辑中,我们需要做两件事:
- 获取请求头中的访问令牌
- 使用访问令牌和 OBO 流为 Microsoft Graph API 交换新的访问令牌。请参考以下请求使用 OBO flow 为 Microsoft Graph API 交换访问令牌:
顺便说一句,请确保您的 Azure 函数应用程序已被授予 user.read
和 Calendars.Read
:
权限
这样您就可以获得新的访问令牌来调用 Microsoft Graph API:
可能这会对某人有所帮助,我已尝试使用上述建议但无法实现,我正在为每个 Azure 功能使用密钥。并将这些密钥存储在 azure Key/Vault 中,并使用托管身份在应用程序的应用程序设置中检索这些密钥。这可能不是理想的情况,但我认为目前它适合我。我真的希望 MS 有一天能改进他们的文档以及示例 code/steps
我有 Azure Functions,我想使用访问令牌对其进行身份验证。
我设置了以下内容
- Angular SPA 正在使用 Azure 应用程序对用户进行身份验证
- 用于调用图形 API 的访问令牌,权限在 Azure 应用程序中设置(第 1 点)
- 具有 SPA 使用的 http 触发器 (API) 的 Azure 函数
目前,API 是匿名的,可以从任何地方调用。我想使用图 api(第 2 点)
使用的访问令牌来保护这些 api我认为对我来说最好的方法是 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/geekculture/easyauth-in-functions-app-with-azure-active-directory-29c01cad8477
我需要在我现有的 Azure 应用程序中做些什么才能使其正常工作吗?
据我了解,您的 Azure 函数受 AAD 使用身份验证(简单身份验证)保护。现在,您的 angular SPA 想要访问此功能。请按照以下步骤操作:
- 转到 Azure AD => 应用程序注册 => 你创建的应用程序来保护你的 Azure 功能=> 公开一个 API 来添加一个范围,例如
access_as_user
这样你的 SPA可能需要此范围的访问令牌:
- 进入 Azure AD => 应用注册 => 您为 SPA 应用创建的应用 => API 权限 => 添加权限 => 我的 API 授予我们的范围刚刚创建:
单击授予管理员同意按钮以完成该过程。
- 在您的 SPA 应用程序中,使用
MsalService
获取范围为:api://<your azure function app id>/access_as_user
的访问令牌,通过此令牌,您可以访问您的 Azure 函数。为了快速测试,我只是在 post man 中测试它并且它完美运行:
不使用此访问令牌
带上这个访问令牌
更新
基本上,您的应用程序请求图如下:
SPA(request with access token)==> Azure函数的Easy Auth(validate token,如果通过,进入Azure函数代码逻辑,如果没有,return 401)==> 的代码逻辑Azure 函数(obo 流获取 Graph API 的访问令牌)==> 调用 Microsoft Graph API
至此,我们已经完成了第 1 步和第 2 步:获取 easy auth 的访问令牌并通过 easy auth 进入 Azure 函数代码逻辑。
所以在Azure函数代码逻辑中,我们需要做两件事:
- 获取请求头中的访问令牌
- 使用访问令牌和 OBO 流为 Microsoft Graph API 交换新的访问令牌。请参考以下请求使用 OBO flow 为 Microsoft Graph API 交换访问令牌:
顺便说一句,请确保您的 Azure 函数应用程序已被授予 user.read
和 Calendars.Read
:
这样您就可以获得新的访问令牌来调用 Microsoft Graph API:
可能这会对某人有所帮助,我已尝试使用上述建议但无法实现,我正在为每个 Azure 功能使用密钥。并将这些密钥存储在 azure Key/Vault 中,并使用托管身份在应用程序的应用程序设置中检索这些密钥。这可能不是理想的情况,但我认为目前它适合我。我真的希望 MS 有一天能改进他们的文档以及示例 code/steps