Dotnet-Isolated Azure Functions - 如何访问 HttpContext
Dotnet-Isolated Azure Functions - how to access HttpContext
我有一个由 HTTP 调用触发的 dotnet 5 Azure 函数 (dotnet-isolated)。
该函数将由不同的 Azure 函数应用程序调用,我想使用 Azure AD 保护目标并使用“client-credentations”OAuth2 流程。
我在 Microsoft GitHub 示例
找到了一个很好的示例,可以为我的场景提供信息
我的问题是,示例使用 WebApi 应用程序作为服务。这可以访问 HttpContext object 在 Microsft.Identity.Web 程序集中使用名为“ValidateAppRole”的扩展方法
我的 Azure 函数确实有一个 HttpRequestData 类型的参数。这有一个 headers 属性 包含键值对。其中一个密钥称为“授权”,其值是 Azure AD 提供的访问令牌。我已经 运行 通过 jwt.ms 这个令牌并且可以确认“角色” collection 包含我需要验证的自定义角色。所以我知道所需的信息已经存在;我只是不知道如何以编程方式检查它。
因为 dotnet-isolated Azure 函数似乎无法访问 HttpContext object。如何进行等同于以下的检查?
HttpContext.ValidateAppRole("CustomRoleName");
我为此制作了一个示例函数应用程序: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>();
代码随后可以检查特定声明。
相同的上下文对象也可以在函数方法中使用。
在示例中,属性与中间件一起使用,因此函数代码本身不必检查授权。
我有一个由 HTTP 调用触发的 dotnet 5 Azure 函数 (dotnet-isolated)。
该函数将由不同的 Azure 函数应用程序调用,我想使用 Azure AD 保护目标并使用“client-credentations”OAuth2 流程。
我在 Microsoft GitHub 示例
找到了一个很好的示例,可以为我的场景提供信息我的问题是,示例使用 WebApi 应用程序作为服务。这可以访问 HttpContext object 在 Microsft.Identity.Web 程序集中使用名为“ValidateAppRole”的扩展方法
我的 Azure 函数确实有一个 HttpRequestData 类型的参数。这有一个 headers 属性 包含键值对。其中一个密钥称为“授权”,其值是 Azure AD 提供的访问令牌。我已经 运行 通过 jwt.ms 这个令牌并且可以确认“角色” collection 包含我需要验证的自定义角色。所以我知道所需的信息已经存在;我只是不知道如何以编程方式检查它。
因为 dotnet-isolated Azure 函数似乎无法访问 HttpContext object。如何进行等同于以下的检查?
HttpContext.ValidateAppRole("CustomRoleName");
我为此制作了一个示例函数应用程序: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>();
代码随后可以检查特定声明。
相同的上下文对象也可以在函数方法中使用。 在示例中,属性与中间件一起使用,因此函数代码本身不必检查授权。