将数据从Azure函数筛选器传递到函数

将数据从Azure函数筛选器传递到函数,azure,jwt,azure-functions,azure-ad-b2c,azure-webjobssdk,Azure,Jwt,Azure Functions,Azure Ad B2c,Azure Webjobssdk,我已将承载令牌验证委托给Azure函数调用筛选器。它验证令牌并获取声明。现在我试图将这些声明或ClaimsPrincipal对象传递到函数中 public override Task OnExecutingAsync( FunctionExecutingContext executingContext, CancellationToken cancellationToken) { var handler = new J

我已将
承载令牌验证
委托给
Azure函数调用筛选器
。它验证令牌并获取声明。现在我试图将这些声明或
ClaimsPrincipal
对象传递到函数中

     public override Task OnExecutingAsync(
                FunctionExecutingContext executingContext, CancellationToken cancellationToken)
     {
             var handler = new JwtSecurityTokenHandler();
             handler.InboundClaimTypeMap.Clear();
             principal = handler.ValidateToken(jwtToken,
                    new TokenValidationParameters
                    {
                        ValidateAudience = false,
                        ValidIssuer = issuer,
                        ValidateIssuerSigningKey = false,
                        SignatureValidator = (t, param) => new 
                                                        JwtSecurityToken(t),
                        NameClaimType = "sub"

                    }, out var token);
     }
我在
FunctionExecutingContext
中看到一个名为
Properties
的字典。但根据文档,它用于在过滤器之间传递数据

所以
executingContext.Properties[“claims”]=principal不将数据传递给函数


我们可以在WebAPI中使用
RouteData
实现它,但不确定是否可以在Azure函数中实现。非常感谢您的帮助。

您的选择有点有限-没有像Request.Properties这样的通用属性包。
您可以让过滤器与您的函数位于一个类上,然后过滤器可以在执行时设置实例字段;函数可以读取字段。您可能需要设置JobActivator并确保每次调用都获得一个新的类实例

我不知道您是否已经找到了解决方案,但是当您将函数用作http触发器时,有一个解决方案。函数的第一个参数是
HttpRequestMessage
对象(
req
)。在筛选器中检索此参数,如下所示:

HttpRequestMessage req = (HttpRequestMessage)executingContext.Arguments.First().Value;

您可以使用
req
.Properties添加自定义数据,并从函数内部读取这些数据

谢谢。我正在使用Azure函数。类是静态的。所以我认为不可能在每次调用函数时都有新的类实例。