Вопрос: Итак, возможно ли создать новую роль в приложении, используя поток учетных данных приложения?если да, то я что-то упустил?
Ответ на общий вопрос Да позволяет добавить новую роль в роли приложения с помощью 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](https://i.stack.imgur.com/OBZzh.png)
В добавлении, когда вы впервые создаете регистрацию приложения, у него уже есть одно делегированное разрешениев Windows Azure Active Directory, поэтому вам может не потребоваться снова явно выбирать Windows Azure Active Directory (если вы не удалили его для своего приложения), а просто выбрать правильные разрешения для приложения и предоставить разрешения в качестве администратора.