Azure Function:使用来自 ClaimsPrincipal 的 SqlQuery 参数

问题描述 投票:0回答:1

我将

ClaimsPrincipal
存储在
FunctionContext.IInvocationFeatures
列表(在 auth 中间件内)中,并希望将
userId
(键:
ClaimTypes.NameIdentifier
)作为 cosmosDb 查询的参数。我可以使用以下伪代码在函数内完成此操作:

 var allFeatures = ((HttpRequestData)req).FunctionContext.Features;
 var claimsPrincipalHolderFeature = allFeatures.First(..);
 var id = claimsPrincipalHolderFeature.Claims.First(c =>
     c.Type.Equals(ClaimTypes.NameIdentifier, StringComparison.OrdinalIgnoreCase)
 ).Value;
 // steps with CosmosClient

但我想通过

CosmosDbInput
属性来做到这一点,例如:

public async Task<HttpResponseData> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "area")] HttpRequestData req,
    [CosmosDBInput(
        databaseName: "%CosmosDb%",
        containerName: "%CosmosContainer%",
        Connection = "CosmosDBConnection",
        SqlQuery = $"SELECT TOP 1 * FROM area a WHERE a.objectId = {{ClaimsPrincipal.Claims[{ClaimTypes.NameIdentifier}]}}")] List<Model> areas)

不幸的是这个模板

{ClaimsPrincipal.Claims[{ClaimTypes.NameIdentifier}]}
不起作用,有人有什么建议吗?如果不可能并且我需要实现自定义绑定,那么最好重用一些已经存在的代码(CosmosDBInputAttribute 和相关代码),而不是从头开始创建任何内容,例如描述的here

c# azure azure-functions azure-cosmosdb azure-http-trigger
1个回答
0
投票

绑定可以使用来自其他绑定的表达式,例如,您可以使用

HttpTrigger
中的某些内容到
CosmosDBInput
中,但从环境来看,我没有看到任何文档说明这是可能的。

值可以从以下位置绑定:

  • 应用程序设置
  • 触发文件名
  • 触发元数据
  • JSON 有效负载(例如
  • 新的GUID
  • 当前日期和时间

参考:https://learn.microsoft.com/azure/azure-functions/functions-bindings-expressions-patterns

© www.soinside.com 2019 - 2024. All rights reserved.