Подтвердить что ты не робот

Получение групп Azure Active Directory в основном проекте asp.net

Я создал новый проект с использованием Visual Studio 2015 и включил проверку подлинности с использованием рабочих и школьных учетных записей в Azure Active Directory. Вот как выглядит сгенерированная функция configure:

app.UseStaticFiles();
app.UseCookieAuthentication();
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
    ClientId = Configuration["Authentication:AzureAd:ClientId"],
    ClientSecret = Configuration["Authentication:AzureAd:ClientSecret"],
    Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"],
    CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"],
    ResponseType = OpenIdConnectResponseType.CodeIdToken
});

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

Вот элементарный код действия, пытающийся получить группы пользователей:

public async Task<IActionResult> Index()
{
    var client = new HttpClient();
    var uri = "https://graph.windows.net/myorganization/users/{user_id}/$links/memberOf?api-version=1.6";

    var response = await client.GetAsync(uri);
    if (response.Content != null)
    {
        ViewData["response"] = await response.Content.ReadAsStringAsync();
    }

    return View();
}    

Что мне нужно использовать или изменить этот код, чтобы убедиться, что я могу получить группы пользователей? В настоящее время ответ таков:

{  
   "odata.error":{  
      "code":"Authentication_MissingOrMalformed",
      "message":{  
         "lang":"en",
         "value":"Access Token missing or malformed."
      },
      "values":null
   }
}
4b9b3361

Ответ 1

Я потратил последние 2 дня, пытаясь понять это и, наконец, получил его. Azure AD - это движущаяся цель, и с ASPNETCORE все еще созревает большинство документации о том, как получить доступ к графику AD Azure устарела. Таким образом, прямо сейчас вы можете получить доступ к графику Azure AD.

  • Обратите внимание на свое приложение clientid
  • Зарегистрируйте свое приложение с помощью Azure Active Directory
  • Создайте ключ в этой регистрации и учтите его (вы можете просматривать его только после его создания)
  • Обратите внимание на свое "Имя арендатора" (вы также можете использовать идентификатор арендатора)

Затем вы будете использовать приведенную выше информацию для создания Токена доступа, а затем использовать этот токен для совершения вызовов на Графике.

public async void GetUsers()
    {
        // Get OAuth token using client credentials 
        string tenantName = "your-tenant-name.onmicrosoft.com";
        string authString = "https://login.microsoftonline.com/" + tenantName;
        AuthenticationContext authenticationContext = new AuthenticationContext(authString, false);
        // Config for OAuth client credentials  
        string clientId = "your-client-id";
        string key = "your-AzureAD-App-Key";
        ClientCredential clientCred = new ClientCredential(clientId, key);
        string resource = "https://graph.windows.net";
        AuthenticationResult authenticationResult;
        try
        {
            authenticationResult = await authenticationContext.AcquireTokenAsync(resource, clientCred);
        }
        catch(Exception ex)
        {
            throw new Exception(ex.Message, ex.InnerException);
        }

        var client = new HttpClient();
        var request = new HttpRequestMessage(System.Net.Http.HttpMethod.Get, "https://graph.windows.net/your-tenant-name.onmicrosoft.com/users?api-version=1.6");
        request.Headers.Authorization =
          new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken);
        var response = await client.SendAsync(request);
        var content = await response.Content.ReadAsStringAsync();
    }

Еще одна огромная информация о том, что я столкнулся, и несколько форумов обсуждают это, если вы получаете ошибку Authorization_Request_Denied или ошибку Недопустимые ошибки. Это разрешено, выполнив команду PowerShell, чтобы предоставить приложение, зарегистрированное в разрешениях "Администратор" Azure AD. Запросы к API-интерфейсу MS Graph дают мне "Запрос на авторизацию отказано - Недостаточно прав для завершения операции"

Команда powershell, которую вы хотите запустить,

Connect-MsolService
$ClientIdWebApp = '{your_AD_application_client_id}'
$webApp = Get-MsolServicePrincipal –AppPrincipalId $ClientIdWebApp
#use Add-MsolRoleMember to add it to "Company Administrator" role).
Add-MsolRoleMember -RoleName "Company Administrator" -RoleMemberType ServicePrincipal -RoleMemberObjectId $webApp.ObjectId

Надеюсь, это поможет. Дайте мне знать, если вы считаете, что необходимо произвести переработку.

Ответ 2

Код намного проще с графическим клиентом

var serviceRoot = new Uri(@"https://graph.windows.net/"+ tenantID);
var activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
    () => Task.FromResult(authenticationResult.AccessToken));

// Fetch more user details from the Graph
var user = await activeDirectoryClient.Users.GetByObjectId(userObjectID).ExecuteAsync();
// fetch all groups (DG + SG) and roles transitively for the user
var userGroups = await user.GetMemberObjectsAsync(securityEnabledOnly: false);