我正在尝试运行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”:“匿名者”, “状态”:“未经授权” }
答案 0 :(得分:0)
如果要通过azure门户管理代码,则只需导航至“集成”并将“授权级别”下拉列表更改为“匿名”。
如果您要通过源代码控制集成(例如,通过git)管理代码,请将其添加到function.json
:
"authLevel": "anonymous"
function.json
的完整摘要:
{
"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
文件中进行修改。
答案 1 :(得分:0)
基于上面尼克正确提供的原因,这就是我解决问题的方法:
在函数的源代码中:
[FunctionName("YourFunctionName")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log){
要做的是将AuthorizationLevel.Function
更改为AuthorizationLevel.Anonymous
。如果您不想为Azure门户GUI的每个功能添加额外的步骤,而只是为了使它们正常工作,则可以使用该功能。
答案 2 :(得分:0)
关于函数的身份验证级别。 如果您在function.json文件中使用 authlevel = 匿名。然后,您无需传递任何访问密钥,就可以像普通api端点一样访问azure函数api。
{
"disabled": false,
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req"
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
例如,您的http触发器是 http://
如果您使用的是 authlevel = 功能,那么您必须在点击时将访问密钥/ Api密钥与http触发端点一起传递。如果您不这样做,则会得到 401未经授权。
{
"disabled": false,
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req"
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
您需要像下面的示例一样传递密钥。
** https://
对于 authlevel = 功能,您可以通过功能键访问http触发器 和主机密钥。在Azure门户中打开功能时,您会找到获取功能网址部分。
注意 使用主机密钥,您可以访问所有http触发器端点,这对于所有http触发器都是通用的。但是功能键对于每个功能都是唯一的。
第三个选项是使用 authlevel = admin 。
{
"disabled": false,
"bindings": [
{
"authLevel": "admin",
"type": "httpTrigger",
"direction": "in",
"name": "req"
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
对于身份验证级别的管理员,只能通过主密钥访问http触发器。
** https://
您将在获取功能网址部分中按照身份验证级别找到所有这些键。 authlevel的完整指南在此链接中。 Azure Functions HTTP trigger function authlevel Explanation
我希望这会有所帮助。
答案 3 :(得分:0)
我也开始使用 {$ifdef FullDebugMode}
LblFastMM4.Visible := true;
{$endif}
{$ifdef EnableMemoryLeakReporting}
LblFastMM4.Visible := true;
{$endif}
,直到我意识到我有两个具有相同路由的函数。那显然把 Azure 弄糊涂了。
检查是否有相同路由的不同功能。