Http Trigger Azure 函数不应从应用服务外部访问

Posted

技术标签:

【中文标题】Http Trigger Azure 函数不应从应用服务外部访问【英文标题】:Http Trigger Azure function should not accessible outside from App Service 【发布时间】:2021-02-16 08:21:56 【问题描述】:

我在我的应用服务中使用 http trigger azure 函数。我希望这个 http 触发 azure 函数不能公开访问,只能从应用服务访问。

目前我已经为 http 触发功能创建了主机密钥,我正在使用它来验证请求。

我应该使用哪种身份验证方法?任何想法。

Azure 函数:

public static class RemoveSubscriptionsForPayers
    
        [FunctionName(nameof(RemoveSubscriptionsForPayers))]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
            [Inject] ILoggingService loggingService,
            [Inject] ICommandValidator commandValidator,
            [Inject] ICommandHandler<ResultDto,RemoveSubscriptionsForPayersCommand> commandHandler)
        
            var logger = new Logger(loggingService);

            try
            
                IActionResult actionResult = null;

                string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

                logger.Info($"RemoveSubscriptionsForPayersCommand received on nameof(RemoveSubscriptionsForPayers)");

                var command = requestBody.AsPoco<RemoveSubscriptionsForPayersCommand>();

                if (commandValidator.Validate<RemoveSubscriptionsForPayersCommand>(req, command, new RemoveSubscriptionsForPayersCommandValidator(), logger, ref actionResult))
                
                    var response =await commandHandler.HandleAsync(command, logger);
                    actionResult = new OkObjectResult(response);
                

                return actionResult;
            
            catch (Exception ex)
            
                logger.Error($"Exception while processing nameof(RemoveSubscriptionsForPayers)", ex,
                  nameof(RemoveSubscriptionsForPayers));

                throw;
            
        
    

【问题讨论】:

Azure AD 不能解决您的问题吗? 谢谢!期待你的答复。我还没试过。 【参考方案1】:

您可以使用 Azure AD 对您的函数进行身份验证,这样更安全。

开启Azure AD认证后,需要获取访问令牌。

请在Azure门户中打开Azure active directory,找到App registrations,您需要在搜索框中搜索您在Azure AD中注册的功能。

这里需要找到url和body的参数值来获取token。

URL to get access token

主体:

client_id

scope

username and password

grant_type:grant_type的值是固定的,都是password

client_secret

你可以这样获取Token:

现在您可以使用 Azure AD 的访问令牌来访问您的函数。

请求头名称为Authorization,头值为Bearer &lt;access-token&gt;

【讨论】:

以上是关于Http Trigger Azure 函数不应从应用服务外部访问的主要内容,如果未能解决你的问题,请参考以下文章

通过 Http Trigger 将新的输入数据发送到已经运行的 Orchestrator 功能

更新表和值的单列应从 0 开始,然后应递增 1

VSCode中的Python Azure函数(HTTPTrigger)上的调试未正确启动Func Host Start

trigger使用

形成良好的编码风格应从哪些方面做起

设置配置并在本地运行 azure queue trigger 功能