Azure Functions - 有些是公共的,有些是受保护的?

Posted

技术标签:

【中文标题】Azure Functions - 有些是公共的,有些是受保护的?【英文标题】:Azure Functions - some public and some protected? 【发布时间】:2018-07-29 11:17:36 【问题描述】:

我在我的应用中使用 Azure Functions,大多数功能需要受我设置的身份验证方案的保护,但有些功能需要匿名访问。

我希望通过此设计完成的操作是让我的应用程序将 refresh_token 传递给包含客户端密钥的 azure 函数,以便为用户刷新令牌,而无需终端设备知道密钥.

我可以做的另一个选择是拥有一个单独的 azure 项目,其中包含一些可公开访问的功能。

【问题讨论】:

那么问题出在哪里?您为每个函数分别设置authLevel 也许我不知道 authLevel 是如何工作的,但是一旦我向 azure 函数添加了身份验证,所有函数都受到保护,需要传入访问令牌,并且所有函数也是匿名的......跨度> 老兄没有。 Easy Auth,门户功能与 authLevel 完全不同。只需阅读后者,这就是您所需要的,您不必引入 Oauth。 您似乎正在为您的功能应用程序使用基于用户的身份验证 (Authentication and authorization in Azure App Service)。正如 Mikhail 所说,您可以为每个功能设置授权级别,而您配置的 Easy Auth 是针对整个功能应用程序的。 AFAIK,Easy Auth 会在功能级别认证之前进行身份验证,如果您同时启用基于用户的功能应用身份验证和功能级别身份验证,那么它们都会进行身份验证。对于您的场景,您可以将请求未通过身份验证时采取的操作选项设置为允许匿名请求(无操作),然后您需要在每个函数中验证身份验证如果他们需要在访问之前进行身份验证。 【参考方案1】:

在 Azure Functions 中执行身份验证时有 3 个选项: 1.通过code查询/标头使用API​​ Keys(在function.json中的authLevel设置在各个函数前面。 2.使用“Easy Auth”,它可以将AAD放在你所有的功能前面 3. 自己做

如果您正在做一些花哨的事情,我建议您只使用 jwt 库或类似的东西来自己做。

我还建议不要在同一个 Function App 上使用未经身份验证和经过身份验证的 Functions,只需创建两个不同的 App。这使得意外弹出特权升级问题变得更加困难。

【讨论】:

好的,谢谢你的回答,我想我同意你的看法——另一个具有简单 RefreshToken 功能的函数应用从长远来看可能会省去很多痛苦......

以上是关于Azure Functions - 有些是公共的,有些是受保护的?的主要内容,如果未能解决你的问题,请参考以下文章

使用 swagger ui 的 Azure Functions 广告身份验证说未找到 redirect.html

Shell公共函数:/etc/init.d/functions详解 action

Azure 函数 - 'azure-functions-host' 文件夹的位置

Azure Functions - 使用 Azure Functions 的表存储触发器

Azure Functions 与 Azure 流分析

AZURE_FUNCTIONS_ENVIRONMENT 与 ASPNETCORE_ENVIRONMENT