Краткое руководство. Добавление возможности входа в веб-приложение с помощью учетной записи Майкрософт
Из этого краткого руководства вы узнаете, как скачать и выполнить пример кода, где показано веб-приложение ASP.NET, способное выполнить вход в систему для пользователей с учетными записями Azure Active Directory (Azure AD).
Иллюстрацию см. в разделе Как работает этот пример.
Предварительные требования
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно.
- Visual Studio 2022
- .NET Framework 4.7.2 или более поздней версии
Регистрация и скачивание приложения
Есть два варианта по созданию приложения: автоматическая или ручная настройка.
Автоматическая настройка
Если вы хотите автоматически настроить приложение, а затем скачать пример кода, выполните следующие действия.
- Перейдите на страницу портала Azure для регистрации приложения.
- Введите имя приложения и нажмите кнопку Зарегистрировать.
- Следуйте инструкциям, чтобы скачать и автоматически настроить новое приложение одним щелчком мыши.
Настройка вручную
Если вы хотите вручную настроить приложение и пример кода, воспользуйтесь следующими процедурами.
Шаг 1. Регистрация приложения
- Войдите на портал Azure.
- Если у вас есть доступ к нескольким арендаторам, в верхнем меню используйте фильтр Каталог и подписка
, чтобы выбрать арендатор, в котором следует зарегистрировать приложение.
- Найдите и выберите Azure Active Directory.
- В разделе Управление выберите Регистрация приложений>Создать регистрацию.
- В поле Имя введите имя для своего приложения. Например, введите ASPNET-Quickstart. Это имя будут видеть пользователи приложения. Вы сможете изменить его позже.
- В качестве типа URI перенаправления выберите Интернет и задайте значение
https://localhost:44368/
. - Выберите Зарегистрировать.
- В разделе Управление выберите Проверка подлинности.
- В разделе Неявное предоставление разрешения и гибридные потоки выберите Токены идентификатора.
- Щелкните Сохранить.
Шаг 2. Скачивание проекта
Совет
Чтобы избежать ошибок, вызванных ограничениями длины пути в Windows, рекомендуется извлечь архив или клонировать репозиторий в каталог рядом с корневой папкой диска.
Шаг 3. Запуск проекта
Извлеките ZIP-файл в локальный каталог рядом с корневым. Например, извлеките в C:\Azure-Samples.
Рекомендуется извлечь архив в каталог рядом с корнем диска, чтобы избежать ошибок, вызванных ограничениями длины пути в Windows.
Откройте решение в Visual Studio (AppModelv2-WebApp-OpenIDConnect-DotNet.sln).
В зависимости от версии Visual Studio может потребоваться щелкнуть правой кнопкой мыши проект AppModelv2-WebApp-OpenIDConnect-DotNet и выбрать Восстановить пакеты NuGet.
Откройте консоль диспетчера пакетов, выбрав пункт Просмотр>Другие окна>Консоль диспетчера пакетов. Затем выполните
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
.Измените файл appsettings.json и замените параметры
ClientId
,Tenant
иredirectUri
на :"ClientId" :"Enter_the_Application_Id_here" /> "TenantId": "Enter_the_Tenant_Info_Here" /> "RedirectUri" :"https://localhost:44368/" />
В этом коде:
Enter_the_Application_Id_here
— это идентификатор приложения (клиента) для регистрации ранее созданного приложения. Найдите идентификатор приложения (клиента) на странице приложения Обзор в разделе Регистрация приложений на портале Azure.- Значение
Enter_the_Tenant_Info_Here
является одним из следующих вариантов:- Если ваше приложение поддерживает вариант Только моя организация, замените это значение на идентификатор каталога (клиента) или имя клиента (например,
contoso.onmicrosoft.com
). Найдите идентификатор каталога (клиента) на странице приложения Обзор в разделе Регистрация приложений на портале Azure. - Если приложение поддерживает вариант Учетные записи в любом каталоге организации, замените это значение на
organizations
. - Если приложение поддерживает вариант Все пользователи с учетными записями Майкрософт, замените это значение на
common
.
- Если ваше приложение поддерживает вариант Только моя организация, замените это значение на идентификатор каталога (клиента) или имя клиента (например,
redirectUri
— это URI перенаправления, введенный ранее в разделе Регистрация приложений на портале Azure.
Дополнительные сведения
В этом разделе представлен код, используемый для выполнения входа пользователей. Это может быть полезно для рассмотрения принципов работы кода и основных аргументов. Также вы поймете, нужно ли добавлять функцию входа в существующее приложение ASP.NET.
Как работает этот пример
Пакеты NuGet для ПО промежуточного слоя OWIN
Вы можете настроить конвейер проверки подлинности, используя проверку подлинности на основе файлов cookie, с помощью OpenID Connect в ASP.NET и пакетов ПО промежуточного слоя OWIN. Эти пакеты можно установить, выполнив в консоли диспетчера пакетов Visual Studio следующие команды:
Install-Package Microsoft.Identity.Web.Owin
Install-Package Microsoft.Identity.Web.MicrosoftGraph
Install-Package Microsoft.Owin.Security.Cookies
Класс Startup OWIN
ПО промежуточного слоя OWIN использует класс startup, выполняемый при запуске процесса размещения. В этом кратком руководстве используется файл startup.cs, расположенный в корневом каталоге. В следующем коде показан параметр, используемый в этом кратком руководстве:
public void Configuration(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
OwinTokenAcquirerFactory factory = TokenAcquirerFactory.GetDefaultInstance<OwinTokenAcquirerFactory>();
app.AddMicrosoftIdentityWebApp(factory);
factory.Services
.Configure<ConfidentialClientApplicationOptions>(options => { options.RedirectUri = "https://localhost:44368/"; })
.AddMicrosoftGraph()
.AddInMemoryTokenCaches();
factory.Build();
}
Where | Описание |
---|---|
ClientId |
Идентификатор приложения, зарегистрированного на портале Azure. |
Authority |
Конечная точка службы токенов безопасности для проверки подлинности пользователей. Для общедоступного облака это обычно https://login.microsoftonline.com/{tenant}/v2.0 . В этом URL-адресе {tenant} — это имя вашего клиента, идентификатор вашего клиента или значение common для ссылки на общую конечную точку. (Общая конечная точка используется для мультитенантных приложений.) |
RedirectUri |
URL-адрес, по которому пользователи переходят после проверки подлинности на платформе удостоверений Майкрософт. |
PostLogoutRedirectUri |
URL-адрес, куда пользователи переходят после выхода. |
Scope |
Список запрашиваемых областей, разделенных пробелами. |
ResponseType |
Запрос на то, чтобы ответ от проверки подлинности содержал код авторизации и маркер идентификации. |
TokenValidationParameters |
Список параметров для проверки маркеров. В этом случае для ValidateIssuer задано значение false , чтобы указать, что приложение может принимать операции входа под любыми типами личных, рабочих или учебных учетных записей. |
Notifications |
Список делегатов, которые можно запускать для сообщений OpenIdConnect . |
Запрос проверки подлинности
Вы можете настроить принудительный вход пользователя, настроив запрос проверки подлинности в контроллере:
public void SignIn()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties{ RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
Совет
Запрос проверки подлинности с помощью этого метода не является обязательным. Его обычно используют, если требуется, чтобы представление было доступно как для пользователей, которые прошли проверку подлинности, так и для тех, которые еще не прошли. Кроме того, можно защитить контроллеры, используя метод, описанный в следующем разделе.
Атрибут защиты контроллера или его действий
Контроллер или его действия можно защитить с помощью атрибута [Authorize]
. Этот атрибут ограничивает доступ к контроллеру или действиям, разрешая доступ к действиям контроллера только пользователям, прошедшим проверку подлинности. После этого запрос на проверку подлинности будет выполняться автоматически, когда не прошедший проверку подлинности пользователь попытается получить доступ к одному из действий или контроллеров, обозначенных атрибутом [Authorize]
.
Вызов Microsoft Graph из контроллера
Вы можете вызвать Microsoft Graph из контроллера, получив экземпляр GraphServiceClient с помощью GetGraphServiceClient
метода расширения на контроллере, как показано в следующем коде:
try
{
var me = await this.GetGraphServiceClient().Me.Request().GetAsync();
ViewBag.Username = me.DisplayName;
}
catch (ServiceException graphEx) when (graphEx.InnerException is MicrosoftIdentityWebChallengeUserException)
{
HttpContext.GetOwinContext().Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
return View();
}
Справка и поддержка
Если вам нужна помощь, если вы хотите сообщить о проблеме или узнать о доступных вариантах поддержки, воспользуйтесь статьей Возможности получения поддержки и справки для разработчиков.
Дальнейшие действия
В руководстве по ASP.NET вы найдете пошаговые инструкции по созданию приложений и функций, а также полное описание того, о чем говорится в этом кратком руководстве.
В следующем кратком руководстве используется пример кода веб-приложения ASP.NET Core, чтобы продемонстрировать, как выполнять вход пользователей из любой организации Azure Active Directory (Azure AD).
Иллюстрацию см. в разделе Как работает этот пример.
Предварительные требования
Регистрация и скачивание приложения, используемого в этом кратком руководстве
Шаг 1. Регистрация приложения
- Войдите на портал Azure.
- Если доступ к нескольким клиентам доступен, используйте фильтр
Каталоги и подписки в верхнем меню, чтобы переключиться на клиент, в котором нужно зарегистрировать приложение.
- Найдите и выберите Azure Active Directory.
- В разделе Управление выберите Регистрация приложений>Создать регистрацию.
- Введите имя приложения Например, введите AspNetCore-Quickstart. Пользователи приложения увидят это имя и могут быть изменены позже.
- В качестве типа URI перенаправления выберите Интернет и задайте значение
https://localhost:44321/signin-oidc
. - Выберите Зарегистрировать.
- В разделе Управление выберите Проверка подлинности.
- Для параметра Front-channel logout URL (URL-адрес выхода Front-channel) введите значение https://localhost:44321/signout-oidc.
- В разделе Неявное предоставление разрешения и гибридные потоки выберите Маркеры идентификации.
- Щелкните Сохранить.
- В разделе Управление выберите Сертификаты & секреты>Секреты клиента>Создать секрет клиента.
- Введите описание, например
clientsecret1
. - Для истечения срока действия секрета выберите значение Через один год.
- Выберите Добавить и сразу же запишите значение секрета для использования на следующем этапе. Значение секрета больше не будет отображаться. Его невозможно восстановить никаким другим способом. Запишите его в надежном месте как обычный пароль.
Шаг 2. Скачивание проекта ASP.NET Core
Скачивание решения ASP.NET Core
Шаг 3. Настройка проекта ASP.NET Core
Извлеките файл .zip в локальную папку, близкую к корню диска, чтобы избежать ошибок, вызванных ограничениями длины пути в Windows. Например, извлеките в C:\Azure-Samples.
Откройте решение в выбранном редакторе кода.
В файле appsettings.json замените значения
ClientId
, иTenantId
. Значение идентификатора приложения (клиента) и каталога (клиента) можно найти на странице обзор приложения в портал Azure."Domain": "[Enter the domain of your tenant, e.g. contoso.onmicrosoft.com]", "ClientId": "Enter_the_Application_Id_here", "TenantId": "common",
Enter_the_Application_Id_Here
— это идентификатор приложения (клиента) для зарегистрированного приложения.- Замените
Enter_the_Tenant_Info_Here
одним из следующих элементов:- Если приложение поддерживает учетные записи только в этом каталоге организации, замените это значение идентификатором каталога (клиента) (GUID) или именем клиента (например,
contoso.onmicrosoft.com
). Идентификатор каталога (клиента) можно найти на странице обзора приложения. - Если приложение поддерживает учетные записи в любом каталоге организации, замените это значение на
organizations
. - Если приложение поддерживает всех пользователей учетных записей Майкрософт, оставьте это значение
common
как .
- Если приложение поддерживает учетные записи только в этом каталоге организации, замените это значение идентификатором каталога (клиента) (GUID) или именем клиента (например,
- Замените
Enter_the_Client_Secret_Here
секретом клиента , который был создан и записан на предыдущем шаге.
Для целей этого руководства изменение других значений в файле appsettings.json не требуется.
Шаг 4. Сборка и запуск приложения
Выполните сборку и запустите приложение в Visual Studio, выбрав пункт меню Отладка >Начать отладку или нажав клавишу F5.
Появится запрос на ввод учетных данных, а затем запрос согласия на разрешения, необходимые приложению. Выберите Принять в запросе на согласие.
После получения согласия на запрошенные разрешения приложение отображает, что вход выполнен успешно, используя правильные учетные данные Azure Active Directory. Адрес электронной почты учетной записи пользователя будет отображаться в разделе результатов API на странице. Он был извлечен с помощью API Graph Майкрософт.
Дополнительные сведения
В этом разделе приведен обзор кода, необходимого для выполнения входа пользователей в систему и вызова API Microsoft Graph от их имени. В этом обзоре содержатся сведения о работе кода, основных аргументах, а также о добавлении входа в имеющееся приложение ASP.NET Core и вызове Microsoft Graph. В нем используется библиотека Microsoft.Identity.Web, являющаяся оболочкой для MSAL.NET.
Как работает этот пример
Класс Startup
ПО промежуточного слоя Microsoft.AspNetCore.Authentication использует класс Startup
, который выполняется при запуске ведущего процесса.
// Get the scopes from the configuration (appsettings.json)
var initialScopes = Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');
public void ConfigureServices(IServiceCollection services)
{
// Add sign-in with Microsoft
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
// Add the possibility of acquiring a token to call a protected web API
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
// Enables controllers and pages to get GraphServiceClient by dependency injection
// And use an in memory token cache
.AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
.AddInMemoryTokenCaches();
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});
// Enables a UI and controller for sign in and sign out.
services.AddRazorPages()
.AddMicrosoftIdentityUI();
}
С помощью метода AddAuthentication()
службу можно настроить так, чтобы она добавляла проверку подлинности на основе файлов cookie. Эта проверка подлинности используется в сценариях браузера, а также для установки запроса OpenID Connect.
Строка, содержащая.AddMicrosoftIdentityWebApp
, добавляет платформа удостоверений Майкрософт проверки подлинности в приложение. Затем приложение настраивается для входа пользователей на основе следующей информации в разделе AzureAD
файла конфигурации appsettings.json:
Ключ appsettings.json | Описание |
---|---|
ClientId |
Идентификатор приложения (клиента) , зарегистрированного на портале Azure. |
Instance |
Конечная точка службы токенов безопасности для проверки подлинности пользователей. Обычно это значение https://login.microsoftonline.com/ , указывающее на общедоступное облако Azure. |
TenantId |
Имя клиента, идентификатор клиента (уникальный идентификатор) или common для входа пользователей под рабочими, учебными или личными учетными записями Майкрософт. |
Метод EnableTokenAcquisitionToCallDownstreamApi
позволяет приложению получить маркер для вызова защищенных веб-API. AddMicrosoftGraph
позволяет контроллерам или страницам Razor напрямую GraphServiceClient
воспользоваться (путем внедрения зависимостей), а AddInMemoryTokenCaches
методы позволяют приложению воспользоваться кэшем маркеров.
Метод Configure()
содержит два важных метода: app.UseAuthentication()
и app.UseAuthorization()
, которые обеспечивают упомянутые функциональные возможности. Кроме того, в методе Configure()
необходимо зарегистрировать маршруты Microsoft Identity Web по крайней мере с одним вызовом endpoints.MapControllerRoute()
или вызовом endpoints.MapControllers()
.
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
Защита контроллера или метода контроллера
Контроллер или его методы можно защитить, применив [Authorize]
атрибут к классу контроллера или одному или нескольким его методам. Этот атрибут [Authorize]
ограничивает доступ, предоставляя его лишь пользователям, прошедшим проверку подлинности. Если пользователь еще не прошел проверку подлинности, для доступа к контроллеру может быть запущен запрос на проверку подлинности. В этом кратком руководстве области считываются из файла конфигурации:
[AuthorizeForScopes(ScopeKeySection = "DownstreamApi:Scopes")]
public async Task<IActionResult> Index()
{
var user = await _graphServiceClient.Me.Request().GetAsync();
ViewData["ApiResult"] = user.DisplayName;
return View();
}
Справка и поддержка
Если вам нужна помощь, если вы хотите сообщить о проблеме или узнать о доступных вариантах поддержки, воспользуйтесь статьей Возможности получения поддержки и справки для разработчиков.
Дальнейшие действия
Следующий репозиторий GitHub содержит ASP.NET Core пример кода, указанный в этом кратком руководстве, и другие примеры, в котором показано, как достичь следующего:
- Добавление проверки подлинности в новое веб-приложение ASP.NET Core.
- Вызов Microsoft Graph, других API Майкрософт или собственных веб-API.
- Добавление авторизации.
- Вход пользователей в национальные облака или вход с помощью удостоверений социальных сетей.
При работе с этим кратким руководством вы скачаете и запустите пример кода. Он демонстрирует, как в веб-приложении Node.js реализовать вход пользователей с помощью потока кода авторизации, а также как получить маркер доступа для вызова API Microsoft Graph.
Иллюстрацию см. в разделе Как работает этот пример.
В рамках этого краткого руководства используется библиотека проверки подлинности Майкрософт для Node.js (MSAL Node) с потоком кода авторизации.
Предварительные требования
- Подписка Azure. Зарегистрируйте подписку Azure бесплатно.
- Node.js
- Visual Studio Code или любой другой редактор кода.
Регистрация и скачивание приложения, используемого в этом кратком руководстве
Шаг 1. Регистрация приложения
- Войдите на портал Azure.
- Если у вас есть доступ к нескольким арендаторам, в верхнем меню используйте фильтр Directories + subscriptions (Каталоги и подписки)
, чтобы выбрать арендатор, в котором следует зарегистрировать приложение.
- В разделе Управление выберите Регистрация приложений>Создать регистрацию.
- Введите значение Name (Имя) для приложения. Пользователи приложения могут видеть это имя. Вы можете изменить его позже.
- В разделе Поддерживаемые типы учетных записей выберите Учетные записи только в этом каталоге организации.
- В качестве типа URI перенаправления выберите Интернет и задайте значение
http://localhost:3000/auth/redirect
. - Выберите Зарегистрировать.
- На странице приложения Обзор запишите идентификатор приложения (клиента) для использования в будущем.
- В разделе Управление выберите Сертификаты и секреты>Секреты клиента>Создать секрет клиента. Оставьте поле для описания пустым, а параметр срока действия — по умолчанию. Затем выберите Добавить.
- Запишите значение параметра Секрет клиента для последующего использования.
Шаг 2. Скачивание проекта
Скачайте основные файлы проекта, чтобы запустить проект с помощью веб-сервера, используя Node.js.
Шаг 3. Настройка приложения Node
Извлеките проект, откройте папку ms-identity-node-main, а затем — файл .env в папке App. Замените значения, как показано ниже:
Переменная | Описание | Пример(ы) |
---|---|---|
Enter_the_Cloud_Instance_Id_Here |
Облачный экземпляр Azure, в котором зарегистрировано приложение | https://login.microsoftonline.com/ (включая завершающую косую черту) |
Enter_the_Tenant_Info_here |
Идентификатор арендатора или основной домен | contoso.microsoft.com или cbe899ec-5f5c-4efe-b7a0-599505d3d54f |
Enter_the_Application_Id_Here |
Идентификатор клиента зарегистрированного приложения | cbe899ec-5f5c-4efe-b7a0-599505d3d54f |
Enter_the_Client_Secret_Here |
Секрет клиента зарегистрированного приложения | WxvhStRfDXoEiZQj1qCy |
Enter_the_Graph_Endpoint_Here |
Облачный экземпляр API Microsoft Graph, который будет вызывать ваше приложение | https://graph.microsoft.com/ (включая завершающую косую черту) |
Enter_the_Express_Session_Secret_Here |
Случайная строка символов, используемая для подписывания файла cookie сеанса Express | WxvhStRfDXoEiZQj1qCy |
Файл должен выглядеть примерно так:
CLOUD_INSTANCE=https://login.microsoftonline.com/
TENANT_ID=cbe899ec-5f5c-4efe-b7a0-599505d3d54f
CLIENT_ID=fa29b4c9-7675-4b61-8a0a-bf7b2b4fda91
CLIENT_SECRET=WxvhStRfDXoEiZQj1qCy
REDIRECT_URI=http://localhost:3000/auth/redirect
POST_LOGOUT_REDIRECT_URI=http://localhost:3000
GRAPH_API_ENDPOINT=https://graph.microsoft.com/
EXPRESS_SESSION_SECRET=6DP6v09eLiW7f1E65B8k
Шаг 4. Запуск проекта
Запустите проект с помощью Node.js, выполнив приведенные ниже действия.
Чтобы запустить сервер, выполните в каталоге проекта следующую команду.
cd App npm install npm start
Перейдите к
http://localhost:3000/
.Выберите Войти, чтобы начать процесс входа.
При первом входе вам будет предложено предоставить согласие на то, чтобы приложение могло выполнить вход и получить доступ к вашему профилю. После успешного входа вы будете перенаправлены обратно на домашнюю страницу приложения.
Дополнительные сведения
Как работает этот пример
В этом примере веб-сервер размещается по адресу localhost (порт 3000). Когда веб-браузер получает доступ к этому адресу, приложение отображает домашнюю страницу. Когда пользователь выбирает Войти, приложение перенаправляет браузер на экран входа в Azure AD с помощью URL-адреса, созданного библиотекой узлов MSAL. После согласия пользователя браузер перенаправляет пользователя обратно на домашнюю страницу приложения вместе с идентификатором и маркером доступа.
MSAL Node
Библиотека MSAL Node — это библиотека, используемая для выполнения входа пользователей и запросов маркеров, которые нужны для доступа к API, защищенному платформой удостоверений Майкрософт. Последнюю версию можно скачать с помощью диспетчера пакетов Node.js (NPM):
npm install @azure/msal-node
Дальнейшие действия
Дополнительные сведения о сценарии веб-приложений, поддерживаемом Платформой удостоверений Майкрософт:
Scenario: Web app that signs in users (Сценарий: веб-приложение, которое входит в систему пользователей)
При работе с этим кратким руководством вы скачаете и выполните пример кода. Такой пример кода демонстрирует, как в веб-приложении Java реализовать вход пользователей и вызов Microsoft Graph. Входить в приложение могут пользователи из любой организации Azure Active Directory (Azure AD).
Иллюстрацию см. в разделе Как работает этот пример.
Предварительные требования
Для запуска этого примера вам потребуются следующие компоненты:
- Пакет SDK для Java 8 или более поздней версии.
- Maven.
Регистрация и скачивание приложения, используемого в этом кратком руководстве
Есть два варианта запуска приложения, используемого в этом кратком руководстве: оперативно (вариант 1) и вручную (вариант 2).
Вариант 1. Регистрация и автоматическая настройка вашего приложения, а затем скачивание примера кода
- Откройте страницу регистрации приложений на портале Azure и приступите к работе.
- Введите имя приложения и нажмите кнопку Зарегистрировать.
- Следуйте инструкциям на экране, чтобы скачать автоматически настроенный код приложения.
Вариант 2. Регистрация и настройка приложения и примера кода вручную
Шаг 1. Регистрация приложения
Чтобы зарегистрировать приложение и добавить в него сведения о регистрации вручную, сделайте следующее:
- Войдите на портал Azure.
- Если у вас есть доступ к нескольким арендаторам, в верхнем меню используйте фильтр Directories + subscriptions (Каталоги и подписки)
, чтобы выбрать арендатор, в котором следует зарегистрировать приложение.
- Найдите и выберите Azure Active Directory.
- В разделе Управление выберите Регистрация приложений.
- Выберите Новая регистрация.
- Введите имя приложения, например java-webapp. Это имя отображается для пользователей вашего приложения. Его можно изменить позже.
- Выберите Зарегистрировать.
- На странице Обзор запишите идентификаторы приложения (клиента) и каталога (арендатора) . Эти значения потребуются позже.
- В разделе Управление выберите Проверка подлинности.
- Выберите Добавить платформу>Веб.
- В разделе URI перенаправления введите
https://localhost:8443/msal4jsample/secure/aad
. - Нажмите кнопку Настроить.
- В разделе Веб в поле URI-коды перенаправления введите
https://localhost:8443/msal4jsample/graph/me
в качестве второго URI перенаправления. - В разделе Управление выберите Сертификаты и секреты. В разделе Секреты клиента выберите Новый секрет клиента.
- Введите описание ключа (например, Секрет приложения), оставьте срок действия по умолчанию и выберите элемент Добавить.
- Запишите значение секрета клиента. Он понадобится вам позднее.
Шаг 2. Скачивание примера кода
Шаг 3. Настройка примера кода
Извлеките ZIP-файл в локальную папку.
Необязательный элемент. Если вы используете интегрированную среду разработки, откройте пример в этой среде.
Откройте файл application.properties. Его можно найти в папке src/main/resources/ . Замените значения в полях
aad.clientId
,aad.authority
иaad.secretKey
значениями идентификатора приложения, идентификатора арендатора и секрета клиента соответственно. Это будет выглядеть примерно так:aad.clientId=Enter_the_Application_Id_here aad.authority=https://login.microsoftonline.com/Enter_the_Tenant_Info_Here/ aad.secretKey=Enter_the_Client_Secret_Here aad.redirectUriSignin=https://localhost:8443/msal4jsample/secure/aad aad.redirectUriGraph=https://localhost:8443/msal4jsample/graph/me aad.msGraphEndpointHost="https://graph.microsoft.com/"
В предыдущем коде:
Enter_the_Application_Id_here
— идентификатор регистрируемого приложения.Enter_the_Client_Secret_Here
— это секрет клиента, созданный вами в разделе Сертификаты и секреты для зарегистрированного приложения.Enter_the_Tenant_Info_Here
— это значение идентификатора каталога (арендатора) приложения, которое вы зарегистрировали.
- Чтобы использовать протокол HTTPS с localhost, укажите свойства
server.ssl.key
. Чтобы создать самозаверяющий сертификат, используйте служебную программу keytool (входит в JRE).
Ниже приведен пример:
keytool -genkeypair -alias testCert -keyalg RSA -storetype PKCS12 -keystore keystore.p12 -storepass password
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=password
server.ssl.key-alias=testCert
- Поместите созданный файл хранилища ключей в папку resources.
Шаг 4. Запуск примера кода
Чтобы запустить проект, выполните одно из следующих действий:
- Запустите его непосредственно из IDE, используя встроенный сервер Spring Boot.
- Упакуйте проект в WAR-файл с помощью Maven, а затем разверните в решении J2EE для контейнеров, например в Apache Tomcat.
Запуск проекта из IDE
Чтобы запустить веб-приложение из IDE, щелкните элемент "Запустить", а затем перейдите на домашнюю страницу проекта. В этом примере стандартная домашняя страница имеет следующий URL-адрес: https://localhost:8443..
На основной странице нажмите кнопку Вход для перенаправления пользователей в Azure Active Directory и запрашивания у них учетных данных.
После проверки подлинности пользователи перенаправляются по адресу
https://localhost:8443/msal4jsample/secure/aad
. После входа на странице появятся сведения об учетной записи пользователя. В примере пользовательского интерфейса есть следующие кнопки:- Выход: пользователь выходит из приложения и перенаправляется на домашнюю страницу.
- Показать сведения о пользователе: получение маркера Microsoft Graph и вызов Microsoft Graph с помощью запроса, который содержит этот маркер. Этот запрос возвращает сведения о пользователе, выполнившем вход в систему.
Запуск проекта из Tomcat
Если вы хотите развернуть пример веб-приложения в Tomcat, внесите несколько изменений в исходный код.
Откройте файл ms-identity-java-webapp/src/main/java/com.microsoft.azure.msalwebsample/MsalWebSampleApplication.
Удалите весь исходный код, заменив его следующим кодом:
package com.microsoft.azure.msalwebsample; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class MsalWebSampleApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(MsalWebSampleApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(MsalWebSampleApplication.class); } }
HTTP-порт Tomcat по умолчанию — 8080, но вам требуется HTTPS-подключение через порт 8443. Чтобы настроить этот параметр:
Перейдите к файлу tomcat/conf/server.xml.
Найдите тег
<connector>
и замените существующий соединитель следующим соединителем:<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="C:/Path/To/Keystore/File/keystore.p12" keystorePass="KeystorePassword" clientAuth="false" sslProtocol="TLS"/>
Откройте окно командной строки и Перейдите к корневой папке этого примера (где находится файл pom.xml) и запустите
mvn package
для сборки проекта.- С помощью этой команды в каталоге /targets будет создан файл msal-web-sample-0.1.0.war.
- Переименуйте этот файл в msal4jsample.war.
- Разверните этот WAR-файл с помощью Tomcat или любого другого решения J2EE для контейнеров.
- Чтобы развернуть файл msal4jsample.war, скопируйте его в каталог /webapps/ в своей установке Tomcat, а затем запустите сервер Tomcat.
После развертывания файла перейдите по адресу https://localhost:8443/msal4jsample в браузере.
Важно!
В рамках этого краткого руководства приложение использует секрет клиента для собственной идентификации в качестве конфиденциального клиента. Так как секрет клиента добавляется в качестве обычного текста в файлы проекта, из соображений безопасности рекомендуем применять сертификат вместо секрета клиента, прежде чем использовать приложение в рабочей среде. Дополнительные сведения о том, как использовать сертификат, см. в статье Учетные данные сертификата для аутентификации приложения.
Дополнительные сведения
Как работает этот пример
Получение MSAL
MSAL для Java (MSAL4J) — это библиотека Java, используемая для выполнения входа пользователей и запрашивания маркеров, которые нужны для доступа к API, защищенному платформой удостоверений Майкрософт.
Добавьте библиотеку MSAL4J в приложение с помощью Maven или Gradle для управления зависимостями, внеся следующие изменения в файл pom.xml (Maven) или build.gradle (Gradle) приложения.
В файле pom.xml:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>msal4j</artifactId>
<version>1.0.0</version>
</dependency>
В файле build.gradle:
compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'
Инициализация MSAL
Добавьте ссылку на MSAL для Java, добавив следующий код в начало файла, в котором будет использоваться MSAL4J:
import com.microsoft.aad.msal4j.*;
Справка и поддержка
Если вам нужна помощь, если вы хотите сообщить о проблеме или узнать о доступных вариантах поддержки, воспользуйтесь статьей Возможности получения поддержки и справки для разработчиков.
Дальнейшие действия
Тема создания веб-приложений, в которых вход пользователей выполняется с помощью платформы удостоверений Майкрософт, подробно рассматривается в нашей серии сценариев:
В этом кратком руководстве вы скачайте и запустите пример кода, демонстрирующий, как веб-приложение Python может выполнять вход пользователей и вызывать microsoft API Graph. Вход в приложение могут выполнять пользователи с личной учетной записью Майкрософт или учетной записью в любой организации Azure Active Directory (Azure AD).
На следующей схеме показано, как работает пример приложения.
- Приложение использует пакет для
identity
получения маркера доступа от платформы удостоверений Майкрософт. - Маркер доступа используется в качестве маркера носителя для проверки подлинности пользователя при вызове microsoft API Graph.
Предварительные требования
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно.
- Клиент Azure Active Directory (Azure AD). Дополнительные сведения о том, как получить клиент Azure AD, см. в статье Как получить клиент Azure AD.
- Python 3.7 и более поздних версий
Шаг 1. Регистрация приложения
Чтобы зарегистрировать приложение в портал Azure, выполните следующие действия.
- Войдите на портал Azure.
- Если у вас есть доступ к нескольким клиентам, в верхнем меню используйте фильтр Каталог и подписка
, чтобы выбрать клиент, в котором следует зарегистрировать приложение.
- Перейдите на страницу Регистрация приложений портала и выберите Новая регистрация.
- Введите имя приложения, например python-webapp.
- В разделе Поддерживаемые типы учетных записей выберите Accounts in any organizational directory and personal Microsoft accounts (Учетные записи в любом каталоге организации и личные учетные записи Майкрософт).
- В разделе URI перенаправления выберите Веб для платформы.
- Введите URI перенаправления
http://localhost:5000/getAToken
. Его можно изменить позже. - Выберите Зарегистрировать.
Шаг 2. Добавление секрета клиента
- На странице приложения Обзор запишите идентификатор приложения (клиента) для использования в будущем.
- В разделе Управление выберите Страницы и сертификаты, а затем в разделе Секреты клиента выберите Новый секрет клиента.
- Введите описание секрета клиента, оставьте срок действия по умолчанию и нажмите кнопку Добавить.
- Сохраните значениесекрета клиента в безопасном расположении. Он понадобится для настройки кода, и вы не сможете получить его позже.
Шаг 3. Добавление область
- В разделе Управление выберите Разрешения API>Добавить разрешение.
- Убедитесь, что выбрана вкладка API Майкрософт.
- В разделе Часто используемые интерфейсы API Microsoft выберите Microsoft Graph.
- В разделе Делегированные разрешения убедитесь, что выбран параметр User.ReadBasic.All . При необходимости используйте поле поиска.
- Выберите Добавить разрешения.
Шаг 4. Скачивание примера приложения
Скачайте пример кода Python или клонируйте репозиторий:
git clone https://github.com/Azure-Samples/ms-identity-python-webapp.git
Для открытия папки также можно использовать интегрированную среду разработки.
Шаг 5. Настройка примера приложения
Перейдите в папку приложения.
Создайте ENV-файл в корневой папке проекта, используя .env.sample в качестве руководства.
CLIENT_ID=<client id> CLIENT_SECRET=<client secret> # The AUTHORITY variable expects a full authority URL. # # If you are using an AAD tenent, configure it as # "https://login.microsoftonline.com/TENANT_GUID" # or "https://login.microsoftonline.com/subdomain.onmicrosoft.com". # # If you are using a CIAM tenant, configure it as "https://subdomain.ciamlogin.com" # # Alternatively, leave it undefined if you are building a multi-tenant app in world-wide cloud #AUTHORITY=<authority url>
- Задайте значение идентификатора
CLIENT_ID
приложения (клиента) для зарегистрированного приложения, доступного на странице обзора. - Задайте значение секрета клиента, созданного
CLIENT_SECRET
в разделе Секреты сертификатов & для зарегистрированного приложения. - Задайте для значения
AUTHORITY
URL-адрес, включающий идентификатор каталога (клиента) зарегистрированного приложения. Этот идентификатор также доступен на странице обзора.
Переменные среды ссылаются в файле app_config.py и хранятся в отдельном env-файле , чтобы не использовать систему управления версиями. Предоставленный GITIGNORE-файл не позволяет получить env-файл .
- Задайте значение идентификатора
Шаг 6. Запуск примера приложения
Создайте виртуальную среду для приложения:
py -m venv .venv .venv\scripts\activate
Установите требования с помощью
pip
:python3 -m pip install -r requirements.txt
Запустите приложение из командной строки, указав узел и порт в соответствии с URI перенаправления:
python3 -m flask run --debug --host=localhost --port=5000
Важно!
В этом кратком руководстве приложение использует секрет клиента для собственной идентификации в качестве конфиденциального клиента. Так как секрет клиента добавляется в качестве обычного текста в файлы проекта, из соображениям безопасности рекомендуется использовать сертификат вместо секрета клиента, прежде чем использовать приложение в качестве рабочего. Дополнительные сведения о том, как использовать сертификат, можно найти в этих инструкциях.
Справка и поддержка
Если вам нужна помощь, если вы хотите сообщить о проблеме или узнать о доступных вариантах поддержки, воспользуйтесь статьей Возможности получения поддержки и справки для разработчиков.
Дальнейшие действия
Подробнее о веб-приложениях с поддержкой входа пользователей узнайте в нашей серии сценариев.