API-интерфейс MS Graph и AAD Graph Rest прекрасно работает при отладке на локальном компьютере, но после публикации в службе приложений Azure получает запрещенный ответ - PullRequest
0 голосов
/ 29 апреля 2019

Я работаю над некоторым фрагментом кода, из которого извлекаю картинку профиля пользователя и имя пользователя из AAD Graph API и Microsoft Graph соответственно.

Код работает нормально при локальной отладке, но после публикации в службе Azure Web App появляется ошибка Forbidden.

Служба приложений включена с проверкой подлинности Azure, и приложения регистрируются с помощью регистрации приложений для использования функций графика.

result = await authContext
    .AcquireTokenSilentAsync("https://graph.microsoft.com/",
        credential,
        new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
    new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", resultpic.AccessToken);

HttpRequestMessage request =
    new HttpRequestMessage(HttpMethod.Get, requestUrl);

HttpResponseMessage response =
    await client.SendAsync(request);

1 Ответ

0 голосов
/ 08 мая 2019

Я предполагаю, что вы уже отключили проверку подлинности службы приложений и включили Azure AD в качестве поставщика удостоверений, как показано ниже:

enter image description here

Чтобы легко получить фотографиючерез Azure AD пока вы можете использовать этот шаблон URL:

https://graph.windows.net/myorganization/users/{user_id}/thumbnailPhoto?api-version={version}

Ниже приведенный код предполагает, что у вас уже есть аутентифицированный пользователь с токеном.Это упрощенный пример;вам нужно изменить возвращаемое значение в соответствии с вашими потребностями, добавить проверку ошибок и т. д.

const string ThumbUrl = "https://graph.windows.net/myorganization/users/{0}/thumbnailPhoto?api-version=1.6";

// Attempts to retrieve the thumbnail image for the specified user, with fallback.
// Returns: Fully formatted string for supplying as the src attribute value of an img tag.
private string GetUserThumbnail(string userId)
{
    string thumbnail = "some base64 encoded fallback image";
    string mediaType = "image/jpg"; // whatever your fallback image type is
    string requestUrl = string.Format(ThumbUrl, userId);

    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", GetToken());
    HttpResponseMessage response = client.GetAsync(requestUrl).Result;

    if (response.IsSuccessStatusCode)
    {
        // Read the response as a byte array
        var responseBody = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult();

        // The headers will contain information on the image type returned
        mediaType = response.Content.Headers.ContentType.MediaType;

        // Encode the image string
        thumbnail = Convert.ToBase64String(responseBody);
    }

    return $"data:{mediaType};base64,{thumbnail}";
}

// Factored out for use with other calls which may need the token
private string GetToken()
{
    return HttpContext.Current.Session["Token"] == null ? string.Empty : HttpContext.Current.Session["Token"].ToString();
}

Также убедитесь, что у вашего приложения Azure AD установлены правильные разрешения.

Надеюсьэто помогает.

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