Dotnet 隔离的 Azure Functions - 如何访问 HttpContext

2024-04-08

我有一个由 HTTP 调用触发的 dotnet 5 Azure 函数(dotnet-isolated)。

该函数将由不同的 Azure 函数应用程序调用,我想使用 Azure AD 保护目标并使用“客户端凭据”OAuth2 流。

我在以下位置找到了一个适合我的场景的优秀示例:Microsoft GitHub Sample

我的问题是,该示例使用 WebApi 应用程序作为服务。这可以访问 HttpContext 对象,使用 Microsft.Identity.Web 程序集中名为“ValidateAppRole”的扩展方法

我的 Azure 函数确实有一个 HttpRequestData 类型的参数。它有一个包含键值对的 headers 属性。这些密钥之一称为“授权”,其值是 Azure AD 提供的访问令牌。我已通过 jwt.ms 运行此令牌,并且可以确认“角色”集合包含我需要验证的自定义角色。所以我知道所需的信息已经存在;我只是不知道如何以编程方式检查它。

由于点网隔离的 Azure 函数似乎无法访问 HttpContext 对象。如何进行与以下内容等效的检查?

HttpContext.ValidateAppRole("CustomRoleName");

我为此制作了一个示例函数应用程序:https://github.com/juunas11/IsolatedFunctionsAuthentication https://github.com/juunas11/IsolatedFunctionsAuthentication.

该示例包括两个中间件:AuthenticationMiddleware 和 AuthorizationMiddleware。 前者验证 JWT 并从中创建 ClaimsPrincipal,而后者则根据 Function 方法上设置的属性检查 ClaimsPrincipal 上的声明。

您可以在 GitHub 存储库中查看完整代码。 身份验证中间件将 ClaimsPrincipal 设置为FunctionContext with:

context.Features.Set(new JwtPrincipalFeature(principal, token));

然后,授权中间件可以通过以下方式从同一上下文对象获取它:

var principalFeature = context.Features.Get<JwtPrincipalFeature>();

然后代码可以检查特定的声明。

Function 方法中也可以使用相同的上下文对象。 在示例中,属性与中间件一起使用,以便函数代码本身不必检查授权。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dotnet 隔离的 Azure Functions - 如何访问 HttpContext 的相关文章

随机推荐