获取调用Azure函数时使用的函数键(名称

cqoc49vn  于 2023-01-05  发布在  其他
关注(0)|答案(3)|浏览(121)

我需要能够识别头文件(x-functions-key)中提供的键(理想情况下是键名),以便在Run方法中对Azure函数进行POST,例如:

Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log, ClaimsPrincipal principal)

在Azure门户面板中添加功能键时,能够保护对Azure功能的访问是很棒的,但我必须能够分辨出使用了哪个功能键。理想情况下,可以关联每个功能键上的声明,但只要我至少能找出使用了哪个键,我就很高兴了。

ufj5ltwl

ufj5ltwl1#

只需从req.HttpContext.User.Claims对象中获取声明“http://schemas.microsoft.com/2017/07/functions/claims/keyid“,它包含键ID,以防使用功能键。
工作起来就像一个魅力,不需要外部查找。

const string KEY_CLAIM = "http://schemas.microsoft.com/2017/07/functions/claims/keyid";
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    var claim = req.HttpContext.User.Claims.FirstOrDefault(c => c.Type == KEY_CLAIM);
    if (claim == null) 
    {
        log.LogError("Something went SUPER wrong");
        throw new UnauthorizedAccessException();
    }
    else
    {
        log.LogInformation( "Processing call from {callSource}", claim.Value);
    }
lo8azlld

lo8azlld2#

Sajeetharan回答了如何使用REST API获取密钥。
关于使用RBAC的能力,您需要使用托管身份,您可以找到有关如何设置它的详细信息:https://learn.microsoft.com/en-us/azure/app-service/overview-managed-identity?tabs=dotnet

kr98yfug

kr98yfug3#

在Azure Functions v1中:

[FunctionName("MyAuthenticatedFunction")]
public static async Task<HttpResponseMessage> MyAuthenticatedFunction([HttpTrigger(AuthorizationLevel.Function)] System.Net.Http.HttpRequestMessage reqMsg, ILogger log)
{
    if (reqMsg.Properties.TryGetValue("MS_AzureFunctionsKeyId", out object val))
        log.LogInformation($"MS_AzureFunctionsKeyId: {val}");  
}

代码参考:WebJobs.Script.WebHost/Filters/AuthorizationLevelAttribute.cs#L77

相关问题