将数据从Azure函数过滤器传递到函数
问题描述:
我已将Bearer Token Validation
委托给Azure Function Invocation Filter
。它验证令牌并获得声明。现在我试图将这些索赔或ClaimsPrincipal
对象转换为函数。将数据从Azure函数过滤器传递到函数
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那样通用的属性包。 您可以使用函数将Filter放在类上,然后过滤器可以在执行时设置实例字段;你的功能可以读取字段。您可能需要设置JobActivator并确保每个调用都获得一个新的类实例。
谢谢。我正在使用Azure函数。类是静态的。所以我认为每次调用函数都不可能有新的类实例。 – Venky