当我运行azure HTTP触发功能时,我得到了401未授权

Sum*_*arg 5 azure azure-functions

我正在尝试运行Azure HTTP触发器Azure函数,并且收到了401 Unauthorized。之前对我来说还不错。

当我在同一功能应用程序下创建新功能并复制相同的代码时,它也可以正常运行,但是当我尝试运行自己创建的功能时,却遇到了我提到的相同错误。

我在流式传输服务中看到以下日志。

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

2018-07-02T07:09:48.893 [Info]执行HTTP请求:{“ requestId”:“ 53e54698-c46b-4cb6-9ed0-d042eaf9ec71”,“ method”:“ POST”,“ uri”:“ / api / Source / MPAA / false“}

2018-07-02T07:09:48.893 [Info]执行的HTTP请求:{“ requestId”:“ 53e54698-c46b-4cb6-9ed0-d042eaf9ec71”,“ method”:“ POST”,“ uri”:“ / api / Source / MPAA / false”,“ authorizationLevel”:“匿名”,“ status”:“未经授权”}

Mr.*_*r.K 19

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

在函数的源代码中:

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

我必须做的是将默认设置更改AuthorizationLevel.FunctionAuthorizationLevel.Anonymous. 前者只允许从其他函数应用触发,后者允许你从浏览器触发。

  • 这是正确的!我想补充一点,这个问题仅在部署您的应用程序后才会出现。在本地主机中进行测试时,您可以从浏览器/邮递员中完美地使用 AuthorizationLevel.Function 调用 Azure 函数。 (2认同)

小智 12

它与函数的授权级别有关。如果您在 function.json 文件中使用authlevel = anonymous 。然后,您无需传递任何访问密钥,就可以像普通 api 端点一样访问 azure function api。

{
"disabled": false,    
"bindings": [
    {
        "authLevel": "anonymous",
        "type": "httpTrigger",
        "direction": "in",
        "name": "req"
    },
    {
        "type": "http",
        "direction": "out",
        "name": "res"
    }
]
Run Code Online (Sandbox Code Playgroud)

}

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

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

    {
"disabled": false,    
"bindings": [
    {
        "authLevel": "function",
        "type": "httpTrigger",
        "direction": "in",
        "name": "req"
    },
    {
        "type": "http",
        "direction": "out",
        "name": "res"
    }
]
Run Code Online (Sandbox Code Playgroud)

}

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

对于authlevel =函数,您可以通过功能键和主机键访问http触发器。在 Azure 门户中打开函数时,您将找到“获取函数 Url”部分。

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

第三个选项是使用authlevel = admin

{
"disabled": false,    
"bindings": [
    {
        "authLevel": "admin",
        "type": "httpTrigger",
        "direction": "in",
        "name": "req"
    },
    {
        "type": "http",
        "direction": "out",
        "name": "res"
    }
]
Run Code Online (Sandbox Code Playgroud)

}

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

您将在“获取函数 Url”部分中根据身份验证级别找到所有这些键。授权级别的完整指南位于此链接中。 Azure Functions HTTP 触发函数 authlevel 说明

我希望这会有所帮助。


Nic*_*ick 11

如果您通过 azure 门户管理您的代码,那么只需导航到“集成”并将“授权级别”下拉列表更改为“匿名”。 在此处输入图片说明

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

"authLevel": "anonymous"
Run Code Online (Sandbox Code Playgroud)

完整片段function.json

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [ "post" ],
      "route": "Source/MPAA",
      "authLevel": "anonymous"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ],
  "disabled": false
}
Run Code Online (Sandbox Code Playgroud)

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