假设我有两个Azure功能:
public static class MyFunctions
[FunctionName("DoIt")]
public static async Task<HttpResponseMessage> DoIt(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req,
TraceWriter log)
{}
[FunctionName("DoSOmethingElse")]
public static async Task<HttpResponseMessage> DoOther(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req,
TraceWriter log)
{}
}
然后我将Function AppService配置为需要AzureAD身份验证。假设我想要角色成员资格或其他声明等特定权限。我可以在每个方法顶部调用的函数中执行以下操作:
req
参数,解析JWT 我的问题是可以选择执行以下任何操作吗?
答案 0 :(得分:2)
我找到了一些与你要找的相关的代码示例:
所以有趣的部分在这里(会给你一个主要的想法):
[FunctionName("GetClaims")]
public static HttpResponseMessage GetClaims(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
HttpRequestMessage request,
TraceWriter log)
{
if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
{
var claimsPrincipal = (ClaimsPrincipal)Thread.CurrentPrincipal;
var claims = claimsPrincipal.Claims.ToDictionary(c => c.Type, c => c.Value);
// Could use the claims here. For this sample, just return it!
return request.CreateResponse(HttpStatusCode.OK, claims, "application/json");
}
else
{
return request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Not Authorized");
}
}
简单的解决方案是创建一个获取声明的函数,然后可以在其他所有函数中调用此函数。
Azure功能有Function Filters(根据文档仍处于预览状态。)
函数过滤器提供了一种使用您自己的逻辑自定义WebJobs执行管道的方法。过滤器与ASP.NET过滤器非常相似。它们可以实现为可以应用于作业函数/类的声明性属性。
过滤器允许您封装要在多个不同功能之间共享的公共逻辑。它们还允许您集中逻辑以解决交叉问题(例如验证,记录,错误处理等)。
因此,您应该能够使用这些信息创建自定义授权过滤器。