Azure AD Graph - создание AppRole с использованием потока учетных данных приложения - PullRequest
0 голосов
/ 21 февраля 2019

Я создаю новую роль в приложении Azure, используя Azure AD Graph API.я получаю токен доступа от Azure, используя этот код:

ClientCredential clientCredential = new ClientCredential(clientId, clientSecret);
AuthenticationContext authenticationContext = new AuthenticationContext(aadInstance + tenantID);
AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(graphResourceID, clientCredential);
return authenticationResult.AccessToken;

и создавая роль, используя следующий код:

//Fetch application Data from azure AD
IApplication application = await activeDirectoryClient.Applications.GetByObjectId(RoleModel.ApplicationID).ExecuteAsync();
AppRole NewRole = new AppRole
{
    Id = CurrentRoleID,
    IsEnabled = true,
    AllowedMemberTypes = new List<string> { "User" },
    Description = RoleModel.RoleDescription,
    DisplayName = RoleModel.RoleName,
    Value = RoleModel.RoleName
 };
 application.AppRoles.Add(NewRole as AppRole);
 await application.UpdateAsync();

Я также предоставил Все разрешения для приложений не делегированные разрешения от портала Azure для Microsoft Graph API.Но я получаю эту ошибку:

{"odata.error": {"code": "Authorization_RequestDenied", "message": {"lang": "en", "value":"Недостаточно прав для завершения операции."}, "RequestId": "e4187318-4b72-49fb-903d-42d419b65778", "date": "2019-02-21T13: 45: 23"}}

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

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

Вопрос: Итак, возможно ли создать новую роль в приложении, используя поток учетных данных приложения?если да, то я что-то упустил?

Обновлено: Добавлены все разрешения приложений для API Windows Azure Active Directory и предоставлено согласие администратора.

enter image description here

Токен доступа: Токен доступа, возвращенный из ADzure AD

enter image description here

1 Ответ

0 голосов
/ 22 февраля 2019

Вопрос: Итак, возможно ли создать новую роль в приложении, используя поток учетных данных приложения?если да, то я что-то упустил?

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

Рабочий код

Ниже приведен рабочий код (это быстрое и грязное консольное приложение, просто чтобы проверить его перед проверкой)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.ActiveDirectory.GraphClient;
using Microsoft.IdentityModel.Clients.ActiveDirectory;

namespace AddAzureADApplicationRoles
{
    class Program
    {
        static void Main(string[] args)
        {
            ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(new Uri("https://graph.windows.net/{myTenantId}"),
                async () => await GetTokenForApplication());

            //Fetch application Data from azure AD
            IApplication application = activeDirectoryClient.Applications.GetByObjectId("{MyAppObjectId}").ExecuteAsync().GetAwaiter().GetResult();

            AppRole NewRole = new AppRole
            {
                Id = Guid.NewGuid(),
                IsEnabled = true,
                AllowedMemberTypes = new List<string> {"User"},
                Description = "My Role Description..",
                DisplayName = "My Custom Role",
                Value = "MyCustomRole"
            };

            application.AppRoles.Add(NewRole as AppRole);
            application.UpdateAsync().GetAwaiter().GetResult();
        }

        public static async Task<string> GetTokenForApplication()
        {
            string TokenForApplication = "";

                AuthenticationContext authenticationContext = new AuthenticationContext(
                    "https://login.microsoftonline.com/{MyTenantId}",
                    false);

                // Configuration for OAuth client credentials 

                    ClientCredential clientCred = new ClientCredential("{AppId}",
                        "{AppSecret}"
                        );
                    AuthenticationResult authenticationResult =
                        await authenticationContext.AcquireTokenAsync("https://graph.windows.net", clientCred);
                    TokenForApplication = authenticationResult.AccessToken;                

            return TokenForApplication;
        }
    }
}

Вероятная проблема, связанная с вашим конкретным исключением

Я думаю, вы дали разрешения приложения для Microsoft Graph API вместо разрешений, необходимых для Azure AD Graph API.

При настройке необходимых разрешений для вашего приложения в диалоговом окне «Выбор API» убедитесь, что вы выбрали «Windows Azure Active Directory», а не «Microsoft Graph».Далее я приведу снимок экрана для более подробной информации.

Действия по предоставлению необходимых разрешений

Обратите внимание, что моему приложению не требуются какие-либо разрешения для "Microsoft Graph API".У него есть только разрешения для приложений, предоставленные для «Windows Azure Active Directory».

Итак, выберите соответствующее разрешение приложения для вашего требования и убедитесь, что в конце вы выполнили «Предоставить разрешения», чтобы предоставить согласие администратора, так как всеупомянутое здесь разрешение приложения требует Требуется Администратор как Да.

enter image description here

В добавлении, когда вы впервые создаете регистрацию приложения, у него уже есть одно делегированное разрешениев Windows Azure Active Directory, поэтому вам может не потребоваться снова явно выбирать Windows Azure Active Directory (если вы не удалили его для своего приложения), а просто выбрать правильные разрешения для приложения и предоставить разрешения в качестве администратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...