0

Ich verwende Azure AD als Authentifizierungsdienst für eine MVC-Anwendung. Ich verwalte die Benutzerkonten erfolgreich mit der Graph-API. Ich versuche, dem Benutzer einen AppRoleAssignment hinzuzufügen.Azure AD AppRoleAssignment hinzufügen

string tenantID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value; 
string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 

Uri servicePointUri = new Uri(graphResourceID); 
Uri serviceRoot = new Uri(servicePointUri, tenantID); 
ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async() => await GetTokenForApplication()); 

IUser user = new User(); 
user.JobTitle = "Tester"; 
user.DisplayName = "Test Tester"; 
user.Surname = "Tester"; 
user.GivenName = "Test"; 
user.UserPrincipalName = "[email protected]"; 
user.AccountEnabled = true; 
user.MailNickname = "ttester"; 
user.PasswordProfile = new PasswordProfile 
{ 
    Password = "XXXXX", 
    ForceChangePasswordNextLogin = true 
}; 
await activeDirectoryClient.Users.AddUserAsync(user); 

var appRoleAssignment = new AppRoleAssignment 
{ 
    Id = Guid.Parse("XXXXX"), 
    ResourceId = Guid.Parse("XXXXX"), 
    PrincipalType = "User", 
    PrincipalId = Guid.Parse(user.ObjectId) 
}; 

user.AppRoleAssignments.Add(appRoleAssignment); 
await user.UpdateAsync(); 

The AppRoleAssignment nie gemacht. Ich bin nicht sicher, ob es die Konstruktorvariablen sind.

Die id Ich bin die ID der Rolle, die im Manifest der Anwendung erstellt wird. Die ResourceId Ich stelle die der Anwendung. Die Anwendung wird unter dem AAD-Verzeichnis erstellt.

Der Code wird tatsächlich ohne Fehler abgeschlossen, jedoch überprüft der Benutzer es nicht AppRoleAssignments.

Am Ende versuche ich RBAC mit Anwendungsrollen zu implementieren.

Jede Hilfe wird sehr geschätzt.

Antwort

2

Zur Anwendung Rolle einem Benutzer zuordnen, müssen Sie das User Objekt IUserFetcher Stimmen:

await ((IUserFetcher)user) 
    .AppRoleAssignments.AddAppRoleAssignmentAsync(appRoleAssignment); 

Ich hatte auch die ResourceId zum ServicePrincipal.ObjectId

var servicePrincipal = (await 
      activeDirectoryClient.ServicePrincipals.Where(
       s => s.DisplayName == "MyApplicationName").ExecuteAsync()).CurrentPage 
      .First(); 

var appRoleAssignment = new AppRoleAssignment 
{ 
    Id = Guid.Parse("XXXXX"), 
    // Service principal id go here 
    ResourceId = Guid.Parse(servicePrincipal.ObjectId), 
    PrincipalType = "User", 
    PrincipalId = Guid.Parse(user.ObjectId) 
}; 
+0

Ich versuche, werde auf das heraus. Neugierig, wenn Sie Ihr 'User' Objekt bekommen, ist die' AppRoles' Eigenschaft gefüllt. Ich habe in meinem Code gefunden, dass es der AppRole zugewiesen wird. Die Eigenschaft selbst bei einem nachfolgenden Abruf ist jedoch immer noch null. –