【问题标题】:When I am running azure HTTP Trigger function i am getting 401 unauthorized当我运行 azure HTTP Trigger 功能时,我得到 401 未授权
【发布时间】:2018-12-10 08:08:15
【问题描述】:

我正在尝试运行 Azure HTTP 触发 Azure 函数,但我收到了 401 Unauthorized。之前对我来说很好用。

当我在同一个函数应用程序下创建新函数并复制相同的代码时,它也运行良好,但是当我尝试运行我创建的函数时,我得到了与我提到的相同的错误。

我在流媒体服务中看到以下日志。

2018-07-02T07:09:41 欢迎您,您现在已连接到日志流服务。

2018-07-02T07:09:48.893 [信息] 执行 HTTP 请求:{ "requestId": "53e54698-c46b-4cb6-9ed0-d042eaf9ec71", “方法”:“发布”, "uri": "/api/Source/MPAA/false" }

2018-07-02T07:09:48.893 [信息] 执行的 HTTP 请求:{ "requestId": "53e54698-c46b-4cb6-9ed0-d042eaf9ec71", “方法”:“发布”, "uri": "/api/Source/MPAA/false", "authorizationLevel": "匿名", “状态”:“未经授权” }

【问题讨论】:

  • 能否添加一些 Azure Function 的代码?如果您尝试访问函数未经授权的外部资源,则可能会发生这种情况。可能是由于某些配置问题(防火墙、安全性、过期身份等)。你能在本地调试代码并检查它吗?
  • @Jan_V 我刚刚在上面的描述中提到,当我在同一个函数应用下使用相同的代码创建新函数时,它工作正常。
  • 您是否启用了应用服务身份验证/授权?检查平台功能 > 身份验证/授权。
  • @ConnorMcMahon 当我启用身份验证/授权时,然后当我尝试再次运行该函数时,我收到一个错误,例如( Authentication is enabled for the function app. Disable authentication before running the function )
  • @ConnorMcMahon 在 v2 中遇到了这个问题。在 2.0.11888 发布之前创建并运行一个 httptrigger 函数。此运行时升级后,得到 401。新创建的函数工作正常。

标签: azure azure-functions


【解决方案1】:

这就是我根据上面尼克正确提供的原因解决问题的方法。如果您不想每次推送代码时都打开 Azure 函数的 GUI,请执行此操作。

在函数的源码中:

[FunctionName("YourFunctionName")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
    ILogger log){

我要做的就是将默认设置AuthorizationLevel.Function 更改为AuthorizationLevel.Anonymous。前者只允许从其他Function应用触发,后者允许你从浏览器触发。

【讨论】:

  • 没错!我想补充一点,此问题仅在部署您的应用程序后才会出现。在 localhost 中进行测试时,您可以从浏览器/邮递员完美地调用带有 AuthorizationLevel.Function 的 Azure 函数。
【解决方案2】:

如果您通过 azure 门户管理代码,则只需导航至“集成”并将“授权级别”下拉菜单更改为“匿名”。

如果您使用源代码控制集成管理您的代码(例如通过 git),请将其添加到您的 function.json

"authLevel": "anonymous"

function.json的完整sn-p:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [ "post" ],
      "route": "Source/MPAA",
      "authLevel": "anonymous"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ],
  "disabled": false
}

注意:以上只是一个示例,您可能需要调整路线。 注意:/api 为默认前缀,可在host.json 文件中修改。

【讨论】:

  • 虽然 function.json 解决方案有效,但对于 C# 等编译语言,这不是最标准的方法。从微软网站我们可以读到:“对于编译语言,这个配置文件是从你代码中的注释自动生成的。对于脚本语言,你必须自己提供配置文件。” -docs.microsoft.com/en-us/azure/azure-functions/…。这就是我最终使用 Mr.K 解决方案的原因。
【解决方案3】:

它关于函数的authlevel。 如果您在 function.json 文件中使用 authlevel = anonymous。然后你不必传递任何访问密钥,你可以像普通的 api 端点一样访问 azure 函数 api。

{
"disabled": false,    
"bindings": [
    {
        "authLevel": "anonymous",
        "type": "httpTrigger",
        "direction": "in",
        "name": "req"
    },
    {
        "type": "http",
        "direction": "out",
        "name": "res"
    }
]

}

例如,您的 http 触发器是 http://.azurewebsites.net/api/,您无需任何访问/身份验证密钥即可轻松访问它。

如果您使用的是 authlevel = function,那么您必须在点击它时将访问密钥/Api 密钥与 http 触发端点一起传递。如果不这样做,您将获得 401 未授权

    {
"disabled": false,    
"bindings": [
    {
        "authLevel": "function",
        "type": "httpTrigger",
        "direction": "in",
        "name": "req"
    },
    {
        "type": "http",
        "direction": "out",
        "name": "res"
    }
]

}

您需要像下面的示例一样传递密钥。 **https://.azurewebsites.net/api/?code= **

对于 authlevel = function,您可以通过 function 键访问 http 触发器 和主机密钥。在 azure 门户中打开函数时,您会找到 Get Function Url 部分。

注意 使用主机密钥,您可以访问所有 http 触发器端点,这对于所有 http 触发器都是通用的。但是每个功能的功能键都是唯一的。

第三个选项是使用 authlevel = admin

{
"disabled": false,    
"bindings": [
    {
        "authLevel": "admin",
        "type": "httpTrigger",
        "direction": "in",
        "name": "req"
    },
    {
        "type": "http",
        "direction": "out",
        "name": "res"
    }
]

}

对于身份验证级别的管理员,http 触发器只能通过主密钥访问。 **https://.azurewebsites.net/api/?code= **

您将在 Get Function Url 部分中根据身份验证级别找到所有这些密钥。 authlevel 的完整指南在此链接中。 Azure Functions HTTP trigger function authlevel Explanation

我希望这会有所帮助。

【讨论】:

    【解决方案4】:

    我也开始得到401,直到我意识到我有两个具有相同路由的函数。这显然让 Azure 很困惑。

    检查您是否没有具有相同路线的不同功能。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2021-05-04
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 2020-08-08
      相关资源
      最近更新 更多