我有一个由HTTP调用触发的dotnet 5 Azure函数(dotnet-isolated)。
该函数将由不同的Azure函数应用程序调用,我希望使用Azure AD保护目标,并使用“客户端凭据”OAuth2流。
我在: Microsoft GitHub示例中找到了一个很好的示例,它为我的场景提供了信息。
我的问题是,示例使用WebApi应用程序作为服务。这将使用Microsft.Identity.Web程序集中名为"ValidateAppRole“的扩展方法来访问HttpContext对象
我的Azure函数确实有一个HttpRequestData类型的参数。它有一个包含键值对的headers属性。其中一个密钥称为"Authorization“,它的值是Azure AD提供的访问令牌。我已经通过jwt.ms运行了这个令牌,可以确认"Roles“集合包含我需要验证的自定义角色。因此,我知道所需的信息是存在的;我只是不知道如何以编程方式检查它。
因为一个与dotnet隔离的Azure函数似乎不能访问HttpContext对象。如何进行等同于以下内容的检查?
HttpContext.ValidateAppRole("CustomRoleName");发布于 2021-09-02 15:26:24
我为此制作了一个示例函数应用程序:https://github.com/juunas11/IsolatedFunctionsAuthentication。
该示例包含两个中间件: AuthenticationMiddleware和AuthorizationMiddleware。前者验证JWT并从中创建一个函数,而后者根据在ClaimsPrincipal方法上设置的属性检查ClaimsPrincipal上的声明。
您可以在GitHub存储库中查看完整的代码。身份验证中间件使用以下命令将ClaimsPrincipal设置为FunctionContext:
context.Features.Set(new JwtPrincipalFeature(principal, token));然后,授权中间件可以通过以下方式从相同的上下文对象中获取它:
var principalFeature = context.Features.Get<JwtPrincipalFeature>();然后,代码可以检查特定的声明。
在函数方法中也可以使用相同的上下文对象。在示例中,属性与中间件一起使用,以便函数代码本身不必检查授权。
https://stackoverflow.com/questions/68993844
复制相似问题