我已将Bearer Token Validation
委托给Azure Function Invocation Filter
。它验证令牌并获得声明。现在我试图将这些声明或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);
}
我在Properties
中看到一个名为FunctionExecutingContext
的词典。但根据文档,它用于在过滤器之间传递数据。
因此executingContext.Properties["claims"] = principal;
无法将数据传递给函数。
我们可以在WebAPI中使用RouteData
来实现它,但不确定是否可以在Azure Functions中执行此操作。任何帮助都非常感谢。
答案 0 :(得分:0)
您的选项有点受限 - 没有像Request.Properties那样检查通用属性包。 您可以将Filter与您的函数放在一个类上,然后过滤器可以在执行时设置实例字段;并且您的函数可以读取字段。您可能需要设置JobActivator并确保每次调用都获得一个新的类实例。
答案 1 :(得分:0)
我不知道您是否已找到解决方案,但是当您将该功能用作http触发器时,有一个解决方案。你函数的第一个参数是HttpRequestMessage
对象(req
)。在过滤器中检索此参数,如下所示:
HttpRequestMessage req = (HttpRequestMessage)executingContext.Arguments.First().Value;
您可以使用req
。属性添加自定义数据并从函数内部读取。