in src/WebJobs.Script.WebHost/Security/Authorization/Policies/AuthorizationOptionsExtensions.cs [18:109]
public static void AddScriptPolicies(this AuthorizationOptions options)
{
options.AddPolicy(PolicyNames.AdminAuthLevel, p =>
{
p.AddScriptAuthenticationSchemes();
p.AddRequirements(new AuthLevelRequirement(AuthorizationLevel.Admin));
p.RequireAssertion(c =>
{
if (c.Resource is AuthorizationFilterContext filterContext)
{
if (!CheckPlatformInternal(filterContext.HttpContext, allowAppServiceInternal: false))
{
return false;
}
}
return true;
});
});
options.AddPolicy(PolicyNames.SystemAuthLevel, p =>
{
p.AddScriptAuthenticationSchemes();
p.AddRequirements(new AuthLevelRequirement(AuthorizationLevel.System));
});
options.AddPolicy(PolicyNames.AdminAuthLevelOrInternal, p =>
{
p.AddScriptAuthenticationSchemes();
p.RequireAssertion(async c =>
{
if (c.Resource is AuthorizationFilterContext filterContext)
{
if (!CheckPlatformInternal(filterContext.HttpContext, allowAppServiceInternal: true))
{
return false;
}
if (filterContext.HttpContext.Request.IsAppServiceInternalRequest() &&
filterContext.HttpContext.Request.IsInternalAuthAllowed())
{
return true;
}
var authorizationService = filterContext.HttpContext.RequestServices.GetRequiredService<IAuthorizationService>();
AuthorizationResult result = await authorizationService.AuthorizeAsync(c.User, PolicyNames.AdminAuthLevel);
return result.Succeeded;
}
return false;
});
});
options.AddPolicy(PolicyNames.SystemKeyAuthLevel, p =>
{
p.AddScriptAuthenticationSchemes();
p.RequireAssertion(c =>
{
if (c.Resource is AuthorizationFilterContext filterContext)
{
if (filterContext.HttpContext.Request.IsAppServiceInternalRequest() &&
filterContext.HttpContext.Request.IsInternalAuthAllowed())
{
return true;
}
string keyName = null;
object keyNameObject = filterContext.RouteData.Values["extensionName"];
if (keyNameObject != null)
{
keyName = DefaultScriptWebHookProvider.GetKeyName(keyNameObject.ToString());
}
else
{
keyNameObject = filterContext.RouteData.Values["keyName"];
if (keyNameObject != null)
{
keyName = keyNameObject.ToString();
}
}
if (!string.IsNullOrEmpty(keyName) && AuthUtility.PrincipalHasAuthLevelClaim(filterContext.HttpContext.User, AuthorizationLevel.System, keyName))
{
return true;
}
}
return false;
});
});
}