Gruppenrollenbasierte Autorisierung
Ich habe versucht, eine gruppenbasierte Autorisierung zu implementieren. Ich habe die benutzerbasierte Autorisierung mithilfe des folgenden Inhalts implementiert:https://medium.com/medialesson/role-based-authorization-in-azure-functions-with-azure-ad-and-app-roles-b1fed5714c91
Weiß jemand mit diesem Inhalt, wie er meinen Code ändert, damit er Gruppen und keine Rollen verarbeiten kann? Ich habe das Manifest in Azure so geändert, dass es Sicherheitsgruppen enthält. Jede Hilfe wäre dankbar. Unten ist der Code:
internal class RoleAuthorizeAttribute : FunctionInvocationFilterAttribute
{
...
public override async Task OnExecutingAsync(FunctionExecutingContext executingContext, CancellationToken cancellationToken)
{
if (!executingContext.Arguments.ContainsKey("principal"))
{
throw new AuthorizationException("Authentication failed. Missing claims.");
}
var claimsPrincipal = (ClaimsPrincipal)executingContext.Arguments["principal"];
var roles = claimsPrincipal.Claims.Where(e => e.Type == "roles").Select(e => e.Value);
var isMember = roles.Intersect(_validRoles).Count() > 0;
if (!isMember)
{
throw new AuthorizationException("Authentication failed. User not assigned to one of the required roles.");
}
}
}
Antworten
Verwenden Sie claimsPrincipal.Claims.Where(e => e.Type == "groups")diese Option , um den Gruppenanspruch zu erhalten.
Der Gruppenanspruch gibt nur die Gruppen-ID und nicht den Gruppennamen zurück. Sie können die Gruppen-IDs in einer Schleife ausführen, um mithilfe von Microsoft Graph die Gruppennamen abzufragen : var group = await graphClient.Groups[{group id}"].Request().GetAsync();. Dann können Sie sie mit den von Ihnen festgelegten Gruppenattributen abgleichen.
Siehe Microsoft Graph-Referenz hier .