0

Я использую Azure AD для службы аутентификации в приложении MVC. Я успешно управляю учетными записями пользователей с помощью Graph API. Я пытаюсь добавить пользователя AppRoleAssignment.Azure AD Добавить AppRoleAssignment

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(); 

AppRoleAssignment никогда не производилось. Я не уверен, что это переменная-конструктор.

id Я размещаю ID роли, созданной в манифесте приложения. ResourceId Я размещаю ObjectId приложения. Приложение создается в AAD Directory.

Код фактически завершается без ошибок, однако при осмотре пользователя он показывает не AppRoleAssignments.

В конце концов я пытаюсь реализовать RBAC, используя роли приложения.

Любая помощь очень ценится.

ответ

2

Чтобы назначить роль приложения пользователю, вам нужно забрасывать User объект IUserFetcher:

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

Я также должен был установить RESOURCEID к 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

Я собираюсь попробовать это из. Любопытно, когда вы получаете свой объект «Пользователь», это свойство «AppRoles», заполненное. Я нашел в своем коде, он фактически присваивает его AppRole. Однако свойство даже при последующем поиске по-прежнему равно нулю. –