Nano Hash - криптовалюты, майнинг, программирование

Проблема с удалением роли приложения в AzureAD с помощью GraphAPI / C #

Я пытаюсь добавить / удалить роль приложения в AzureAD с помощью VisualStudio / C # / GraphAPI. Я могу успешно добавить пользователя в ApplicationRole, но роль удаления (или удаления) не работает.

Я исследовал Интернет, и мне кажется, что проблема связана с самим API-интерфейсом AzureAD. чек:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/5707763c-41f7-4465-abdb-3a8d8ded153b/graph-api-apiversion15-how-to-remove-user-from-application-role-using-c-net?forum=WindowsAzureAD

Однако это старый пост, поэтому не уверен, доступен ли какой-либо обходной путь.

Приветствуется любая помощь для решения этой проблемы.


Ответы:


1

Я могу успешно добавить пользователя в ApplicationRole, но роль удаления (или удаления) не работает.

Я могу удалить роль приложения с помощью следующего кода.

var listRoles = user.AppRoleAssignments.ToList();
user.AppRoleAssignments.Remove(listRoles[0]); //just demo: you could remove the role as your wanted
user.UpdateAsync().Wait();

Ниже приведен мой подробный тестовый демонстрационный код.

1. получить токен доступа

private static async Task<string> GetAppTokenAsync(string graphResourceId, string tenantId, string clientId, string secretKey)
        {
            string aadInstance = "https://login.microsoftonline.com/" + tenantId + "/oauth2/token";
            AuthenticationContext authenticationContext = new AuthenticationContext(aadInstance, false);
            var result = await authenticationContext.AcquireTokenAsync(graphResourceId,
                new ClientCredential(clientId, userId));
            return result.AccessToken;
        }

2. Запустите graphclient.

var graphResourceId = "https://graph.windows.net";
var tenantId = "tenantId";
var clientId = "client Id";
var secretKey = "secret key";
var servicePointUri = new Uri(graphResourceId); 
var serviceRoot = new Uri(servicePointUri, tenantId);
var activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async () => await GetAppTokenAsync(graphResourceId, tenantId, clientId, secretKey));

3. создать приложение и субъект-службу

 Application appObject = new Application { DisplayName = "Test-Demo App" };
 appObject.IdentifierUris.Add("https://localhost/demo/" + Guid.NewGuid());
 appObject.ReplyUrls.Add("https://localhost/demo");
 AppRole appRole = new AppRole
 {
    Id = Guid.NewGuid(),
    IsEnabled = true,
    DisplayName = "Something",
    Description = "Anything",
    Value = "policy.write"
 };

 appRole.AllowedMemberTypes.Add("User");
 appObject.AppRoles.Add(appRole);
 activeDirectoryClient.Applications.AddApplicationAsync(appObject).Wait();
 // create a new Service principal
 ServicePrincipal newServicePrincpal = new ServicePrincipal
 {
    DisplayName = appObject.DisplayName,
    AccountEnabled = true,
    AppId = appObject.AppId
 };
activeDirectoryClient.ServicePrincipals.AddServicePrincipalAsync(newServicePrincpal).Wait();

4. добавить роли

User user = (User) activeDirectoryClient.Users.GetByObjectId("userobjectId").ExecuteAsync().Result;
AppRoleAssignment appRoleAssignment = new AppRoleAssignment
{
       Id = appRole.Id,
       ResourceId = Guid.Parse(newServicePrincpal.ObjectId),
       PrincipalType = "User",
       PrincipalId = Guid.Parse(user.ObjectId),

  };
user.AppRoleAssignments.Add(appRoleAssignment);
user.UpdateAsync().Wait();

5. удалить роль от пользователя

var listRoles = user.AppRoleAssignments.ToList();
user.AppRoleAssignments.Remove(listRoles[0]);
user.UpdateAsync().Wait();
27.08.2018
  • Спасибо за ваш ответ. Могу ли я узнать, какую версию библиотеки Graph API вы используете? Поскольку кажется, что Microsoft.Azure.ActiveDirectory.GraphClient версии 2.1.1 имеет известную проблему для удаления роли приложения 27.08.2018
  • Для меня user.AppRoleAssignments имеет значение 0 (ноль), но у этого пользователя есть роль приложения. 27.08.2018
  • Я использую приведенный ниже код для удаления роли приложения, который не дает никаких ошибок, но и не удаляет роль › 27.08.2018
  • IUserFetcher u = пользователь; var appRoleAssignmentResult = ожидание u.AppRoleAssignments.Where (a = ›a.ResourceId == servicePrincipalId) .ExecuteAsync (); var existingRoleAssignment = (AppRoleAssignment) appRoleAssignmentResult.CurrentPage.FirstOrDefault (); если (existingRoleAssignment! = null) {user.AppRoleAssignments.Remove (existingRoleAssignment); user.UpdateAsync (). Ждать (); } 27.08.2018
  • user.AppRoleAssignments comes 0 (zero), but this user does have an Application Role Что это значит? И не могли бы вы поделиться, как это проверить. 29.08.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..