azure - Azure Functions 上的身份验证如何工作

标签 azure asp.net-core authentication azure-functions webapi

我有一个托管在 Azure 应用服务上的 .Net 5 Web API。

该 API 具有三个作为托管服务运行的后台服务,这些服务执行长时间运行的进程,例如批量发送电子邮件和短信,以及每天在计时器上运行一次的其他功能。

我正在考虑将这些托管/后台服务移出到单独的 Azure Functions 中,然后我将通过 HTTP 请求从我的 API 调用/触发这些服务(在计时器上运行的服务除外)

我担心的是身份验证。它如何与 Azure Functions 配合使用?目前,我的 Web API 使用 Auth0 作为身份验证服务器。因此,当用户使用前端 Web 应用程序 (Angular) 时,他会登录(通过 Auth0 的登录表单),然后前端从 AUth0 检索访问/不记名 token ,然后将其包含在对 API 的每次调用中(在身份验证 header 中)。

现在,显然我不希望任何人都能够调用 Azure Functions - 只有我的 Web API 应该能够这样做。但这是如何运作的呢? API在调用时是否需要将从前端收到的访问 token 转发到Azure Function?或者我是否需要在 Azure 门户中设置一些内容来告诉它必须允许我的 API 访问 Azure 功能(并阻止来自任何其他来源的任何请求)?

我以前从未使用过 Azure Functions 甚至 WebJobs,所以我有点迷失。 谢谢

最佳答案

创建 HTTP 触发的 Azure Function 时,默认情况下将其设置为授权级别 = Function,这意味着任何尝试通过其 URL 调用该函数的应用程序都需要知道为该函数生成的特定访问 key 创建时。

在您的示例中,您的 Web API 会在其配置中存储该函数的调用 URL 和访问 key ,并使用该 key 调用您的函数。由于 key 完全保留在 Azure 的服务器端,任何其他东西都无法访问它,因此它是完全安全的。

根据您的要求,您还可以在访问 key 机制之上分层其他类型的授权/身份验证(例如不记名 token ),或者使用这些而不是访问 key (通过设置允许匿名访问的功能)。

为了获得最大的安全性,我建议首先使用函数访问 key ,以确保除了您的应用程序之外没有人可以成功调用该函数,然后传递并验证不记名 token 以确保应用程序尝试调用该函数确实被允许这样做。

请注意,Azure Functions 与标准 ASP.NET Core 略有不同,特别是在它 doesn't really support yet 的中间件方面。 ,因此您可能需要编写自己的代码来从传入 HTTP 请求的 header 中读取不记名 token ,并验证其是否有效。

引用:https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=csharp#authorization-keys

关于azure - Azure Functions 上的身份验证如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66042273/

相关文章:

azure - 存储帐户 IP 受限时无法访问 CDN?

c# - 使用 GetSharedAccessSignature 下载大文件的 Azure

c# - 即使有数千个分区,Azure Cosmos 租赁容器也仅为整个容器创建一个租赁

azure - 是否可以从 Azure Web 角色实例下载转储文件

php - 可捕获的 fatal error :传递给 UsernamePasswordToken::__construct() 的参数 4 必须是数组,给定为空

android - 服务器是否保存移动请求的 session ?

c# - NSwag MSBuild "The method ' get' on path '/api/Account' 已注册多次”

.net - .net core 工具预览 2 是否有离线版本?

c# - 如何从 ASP.Net Core 中的 SqlServerDBContextOptionsExtensions 获取连接字符串

javascript - Node.js 上的 TokenError : Bad Request; Google OAuth2; Passport. js;能够 console.log 数据,但是会出现错误