Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как получить доступ к Microsoft Graph из веб-приложения, работающего на Azure App Service.
Вы хотите добавить доступ к Microsoft Graph из веб-приложения и выполнить некоторые действия в качестве пользователя, выполнившего вход. В этом разделе описывается предоставление делегированных разрешений веб-приложению и получение сведений о профиле пользователя, выполнившего вход, из Microsoft Entra ID.
В этом руководстве вы узнаете, как:
- предоставить веб-приложению делегированные разрешения;
- Вызов Microsoft Graph из веб-приложения для вошедшего пользователя.
Если у вас нет учетной записи Azure, создайте учетную запись free перед началом работы.
Предпосылки
- Веб-приложение, работающее на платформе Azure App Service с включенным модулем аутентификации/авторизации App Service.
Предоставление интерфейсного доступа к вызову Microsoft Graph
После включения проверки подлинности и авторизации в веб-приложении веб-приложение регистрируется в платформе удостоверений Майкрософт и поддерживается приложением Microsoft Entra. На этом шаге вы предоставляете веб-приложению разрешения на доступ к Microsoft Graph для пользователя.
Замечание
Технически вы предоставляете приложению Microsoft Entra веб-приложения разрешения на доступ к приложению Microsoft Graph Microsoft Entra для пользователя.
В Microsoft Entra admin center выберите Entra ID.
Выберите регистрация приложений>принадлежащие приложения>Просмотреть все приложения в этом каталоге. Выберите имя веб-приложения и выберите разрешения API.
Выберите "Добавить разрешение", а затем выберите API Майкрософт, а затем Microsoft Graph.
Выберите делегированные разрешения и выберите User.Read из списка. Выберите Добавить разрешения.
Настройте службу приложений для возвращения действующих токенов доступа
Теперь веб-приложение имеет необходимые разрешения для доступа к Microsoft Graph в качестве пользователя, вошедшего в систему. В этом разделе вы настраиваете аутентификацию и авторизацию службы приложений для получения работоспособного маркера доступа для доступа к Microsoft Graph. Для этого шага необходимо добавить User.Read область для нижестоящей службы (Microsoft Graph): https://graph.microsoft.com/User.Read
Это важно
Если служба App Service не настроена для возврата пригодного маркера доступа, вы получите ошибку CompactToken parsing failed with error code: 80049217 при вызове API Microsoft Graph в вашем коде.
Перейдите к Azure Обозреватель ресурсов и используя дерево ресурсов, найдите веб-приложение. URL-адрес ресурса должен быть похож на https://management.azure.com/subscriptions/subscriptionId/resourceGroups/SecureWebApp/providers/Microsoft.Web/sites/SecureWebApp20200915115914.
Теперь обозреватель ресурсов Azure открыт с веб-приложением, выбранным в дереве ресурсов.
В верхней части страницы выберите Edit, чтобы включить редактирование Azure ресурсов.
В браузере слева перейдите к разделу config>authsettingsV2.
В представлении authsettingsV2 выберите Изменить.
Найдите раздел входа identityProviders> и добавьте следующие параметры loginParameters:
"loginParameters":[ "response_type=code id_token","scope=openid offline_access profile https://graph.microsoft.com/User.Read" ]"identityProviders": { "azureActiveDirectory": { "enabled": true, "login": { "loginParameters":[ "response_type=code id_token", "scope=openid offline_access profile https://graph.microsoft.com/User.Read" ] } } } },Сохраните настройки, выбрав PUT.
Эти настройки могут вступить в силу через несколько минут. Теперь веб-приложение настроено для доступа к Microsoft Graph с соответствующим токеном доступа. Если это не так, Microsoft Graph возвращает ошибку, указывающую, что формат компактного токена неверный.
Вызов Microsoft Graph при помощи .NET
Теперь веб-приложение имеет необходимые разрешения, а также добавляет идентификатор клиента Microsoft Graph в параметры входа.
Используя библиотеку Microsoft.Identity.Web, веб-приложение получает токен доступа для аутентификации в Microsoft Graph. В версии 1.2.0 и более поздних версиях библиотека Microsoft.Identity.Web интегрируется с модулем проверки подлинности и авторизации службы приложений App Service и может работать вместе с ним. Microsoft. Identity.Web обнаруживает, что веб-приложение размещено в службе приложений и автоматически извлекает маркер доступа из заголовка запроса X-MS-TOKEN-AAD-ACCESS-TOKEN, который служба приложений внедряет (см. маркеры Retrieve в коде приложения). Вам не нужно вручную получить доступ к этому заголовку в коде. Затем токен доступа передается в прошедшие аутентификацию запросы с помощью Microsoft Graph API.
Просмотреть этот код как часть примера приложения можно здесь:
Замечание
Библиотека Microsoft.Identity.Web не требуется в вашем веб-приложении для базовой аутентификации или авторизации, а также для аутентификации запросов с помощью Microsoft Graph. Вы можете безопасно вызывать нижестоящие API, если включен только модуль проверки подлинности и авторизации Службы приложений.
Но проверка подлинности и авторизация Службы приложений предназначены только для самых простых сценариев проверки подлинности. Для более сложных сценариев (например, для обработки пользовательских утверждений) нужна библиотека Microsoft.Identity.Web или Microsoft Authentication Library. В начале требуется немного больше работы по настройке и конфигурации, но библиотека Microsoft.Identity.Web может работать вместе с модулем аутентификации/авторизации службы приложений. Позже, когда веб-приложение должно обрабатывать более сложные сценарии, можно отключить модуль проверки подлинности и авторизации службы приложений и Microsoft. Identity.Web уже будет частью вашего приложения.
Установка пакетов клиентских библиотек
Установите Microsoft. Identity.Web и Microsoft. Identity.Web.MicrosoftGraph пакеты NuGet в проекте с помощью интерфейса командной строки .NET Core или консоли Package Manager в Visual Studio.
командная строка .NET Core
Откройте командную строку и перейдите в каталог с файлом проекта.
Выполните команды установки.
dotnet add package Microsoft.Identity.Web.MicrosoftGraph
dotnet add package Microsoft.Identity.Web
Консоль диспетчера пакетов
Откройте проект или решение в Visual Studio и откройте консоль с помощью команды Tools>NuGet Package Manager>Package Manager Console.
Выполните команды установки.
Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Identity.Web
Startup.cs
В файле Startup.cs метод AddMicrosoftIdentityWebApp добавляет Microsoft.Identity.Web к вашему веб-приложению. Метод AddMicrosoftGraph добавляет поддержку Microsoft Graph. Сведения об управлении добавочным согласием и условным доступом см. в этой статье.
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Identity.Web;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
// Some code omitted for brevity.
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
string[] initialScopes = Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
.AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
.AddInMemoryTokenCaches();
services.AddAuthorization(options =>
{
// By default, all incoming requests will be authorized according to the default policy
options.FallbackPolicy = options.DefaultPolicy;
});
services.AddRazorPages()
.AddMvcOptions(options => {})
.AddMicrosoftIdentityUI();
services.AddControllersWithViews()
.AddMicrosoftIdentityUI();
}
}
appsettings.json
AzureAd указывает конфигурацию для библиотеки Microsoft.Identity.Web. В Microsoft Entra admin center выберите Entra ID в меню портала и выберите App registrations. Выберите регистрацию приложения, созданную при включении модуля проверки подлинности и авторизации Службы приложений. (Регистрация приложения должна иметь то же имя, что и ваше веб-приложение.) Идентификатор клиента и идентификатор клиента можно найти на странице обзора регистрации приложения. Доменное имя можно найти на обзорной странице Microsoft Entra для вашего арендатора.
Graph указывает конечную точку Microsoft Graph и начальные области, необходимые приложению.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "[Enter the domain of your tenant, e.g. contoso.onmicrosoft.com]",
"TenantId": "[Enter 'common', or 'organizations' or the Tenant Id (Obtained from the Microsoft Entra admin center. Select 'Endpoints' from the 'App registrations' blade and use the GUID in any of the URLs), e.g. da41245a5-11b3-996c-00a8-4d99re19f292]",
"ClientId": "[Enter the Client Id (Application ID obtained from the Microsoft Entra admin center), e.g. ba74781c2-53c2-442a-97c2-3d60re42f403]",
"ClientSecret": "[Copy the client secret added to the app from the Microsoft Entra admin center]",
"ClientCertificates": [
],
// the following is required to handle Continuous Access Evaluation challenges
"ClientCapabilities": [ "cp1" ],
"CallbackPath": "/signin-oidc"
},
"DownstreamApis": {
"MicrosoftGraph": {
// Specify BaseUrl if you want to use Microsoft graph in a national cloud.
// See https://learn.microsoft.com/graph/deployments#microsoft-graph-and-graph-explorer-service-root-endpoints
// "BaseUrl": "https://graph.microsoft.com/v1.0",
// Set RequestAppToken this to "true" if you want to request an application token (to call graph on
// behalf of the application). The scopes will then automatically
// be ['https://graph.microsoft.com/.default'].
// "RequestAppToken": false
// Set Scopes to request (unless you request an app token).
"Scopes": [ "User.Read" ]
// See https://aka.ms/ms-id-web/downstreamApiOptions for all the properties you can set.
}
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Вызов Microsoft Graph от имени пользователя
В следующем примере показано, как вызвать Microsoft Graph в качестве пользователя, вошедшего в систему, и получить некоторые сведения о пользователе. Объект GraphServiceClient внедряется в контроллер, а проверка подлинности была настроена библиотекой Microsoft.Identity.Web.
// Index.cshtml.cs
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Graph;
using System.IO;
using Microsoft.Identity.Web;
using Microsoft.Extensions.Logging;
// Some code omitted for brevity.
[AuthorizeForScopes(Scopes = new[] { "User.Read" })]
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly GraphServiceClient _graphServiceClient;
public IndexModel(ILogger<IndexModel> logger, GraphServiceClient graphServiceClient)
{
_logger = logger;
_graphServiceClient = graphServiceClient;
}
public async Task OnGetAsync()
{
try
{
var user = await _graphServiceClient.Me.GetAsync();
ViewData["Me"] = user;
ViewData["name"] = user.DisplayName;
using (var photoStream = await _graphServiceClient.Me.Photo.Content.GetAsync())
{
byte[] photoByte = ((MemoryStream)photoStream).ToArray();
ViewData["photo"] = Convert.ToBase64String(photoByte);
}
}
catch (Exception ex)
{
ViewData["photo"] = null;
}
}
}
Очистите ресурсы
Если вы выполнили все действия, описанные в этом многочастном руководстве, вы создали службу приложений, план размещения для неё и учетную запись хранения в группе ресурсов. Вы также создали регистрацию приложения в Microsoft Entra ID. Если вы выбрали внешнюю конфигурацию, возможно, вы создали новый внешний клиент. Если ресурсы и регистрация приложения больше не нужны, удалите их, чтобы за них не взималась плата.
В этом руководстве вы узнаете, как:
- Удалите ресурсы Azure, созданные при выполнении руководства.
Удаление группы ресурсов
На портале Azure в меню портала Azure выберите группы ресурсов.
Выберите группу ресурсов, содержащую вашу службу приложений и план службы приложений.
Щелкните Удалить группу ресурсов. Одновременно с группой ресурсов удаляются все содержащиеся в ней ресурсы.
Это действие может занять несколько минут.
Удаление регистрации приложения
В Microsoft Entra admin center выберите App registrations. Затем выберите созданное вами приложение.
В разделе общих сведений регистрации приложения выберите Удалить.
Удалить внешнего арендатора
Если вы создали новый внешний клиент, его можно удалить.
В Центре администрирования Microsoft Entra перейдите к Entra ID>Обзор>Управление арендаторами.
Выберите клиент, который нужно удалить, и нажмите кнопку "Удалить".
Перед удалением клиента может потребоваться выполнить необходимые действия. Например, может потребоваться удалить все потоки пользователей и регистрации приложений в арендаторе.
Если вы готовы удалить арендатора, нажмите "Удалить".
Дальнейшие шаги
Из этого руководства вы узнали, как:
- предоставить веб-приложению делегированные разрешения;
- Вызов Microsoft Graph из веб-приложения для вошедшего пользователя.