Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".
Чтобы авторизовать доступ к веб-API, вы можете обслуживать только те запросы, которые содержат действительный токен доступа, выдаваемый Azure Active Directory B2C (Azure AD B2C). Эта статья объясняет, как включить авторизацию Azure AD B2C для вашего веб-API. После выполнения шагов, описанных в этой статье, только пользователи, получившие действительный токен доступа, будут авторизованы для обращения к конечным точкам вашего веб-API.
Предпосылки
Прежде чем начать, прочитайте одну из следующих статей, в которых обсуждается настройка аутентификации для приложений, обращающихся к веб-API. Затем следуйте инструкциям в этой статье, чтобы заменить пример веб-API на ваш собственный веб-API.
- Настройка аутентификации в примере приложения ASP.NET Core
- Настройте аутентификацию в примерном одностраничном приложении (SPA)
Обзор
Аутентификация на основе токенов гарантирует, что запросы к веб-API включают действующий токен доступа.
Приложение выполняет следующие шаги:
Он выполняет аутентификацию пользователей с помощью Azure AD B2C.
Оно получает токен доступа с необходимыми разрешениями (областями) для конечной точки веб-API.
Он передает токен доступа как ключ доступа в заголовке аутентификации HTTP-запроса, используя следующий формат.
Authorization: Bearer <access token>
Веб-API выполняет следующие шаги:
Он считывает токен носителя из заголовка авторизации в HTTP запросе.
Оно проверяет токен.
Он проверяет разрешения (области) в токене.
Он читает утверждения, которые закодированы в токене (необязательно).
Он отвечает на HTTP-запрос.
Обзор регистрации приложения
Чтобы ваша приложение могло входить в систему с Azure AD B2C и вызывать веб-API, необходимо зарегистрировать два приложения в каталоге Azure AD B2C.
Регистрация веб-, мобильного или SPA-приложения позволяет вашему приложению входить в систему с Azure AD B2C. Процесс регистрации приложения создает Идентификатор приложения, также известный как идентификатор клиента, который уникально идентифицирует ваше приложение (например, ID приложения: 1).
Регистрация веб-API позволяет приложению вызывать защищенный веб-API. Регистрация предоставляет доступ к разрешениям веб-API (областям). Процесс регистрации приложения генерирует идентификатор приложения, который уникально идентифицирует ваш веб-API (например, ID приложения: 2). Предоставьте вашему приложению (ID приложения: 1) разрешения на доступ к областям веб-API (ID приложения: 2).
Регистрации приложения и архитектура приложения описаны на следующем диаграмме.
Подготовка среды разработки
В следующих разделах вы создаёте новый проект веб-API. Выберите язык программирования: ASP.NET Core или Node.js. Убедитесь, что у вас есть компьютер, на котором установлено одно из следующих программ:
- Visual Studio Code
- C# для Visual Studio Code (последняя версия)
- Пакет SDK для .NET 5.0
Шаг 1: Создайте защищенный веб API
Создайте новый проект веб-API. Сначала выберите язык программирования, который вы хотите использовать, ASP.NET Core или Node.js.
Используйте команду dotnet new
. Команда dotnet new
создаёт новую папку с именем TodoList с активами проекта веб-API. Откройте каталог, а затем откройте Visual Studio Code.
dotnet new webapi -o TodoList
cd TodoList
code .
Когда вас попросят "добавить необходимые ресурсы в проект", выберите Да.
Шаг 2: Установите зависимости
Добавьте библиотеку аутентификации в ваш проект веб API. Библиотека аутентификации разбирает заголовок HTTP аутентификации, проверяет токен и извлекает утверждения. Для получения дополнительной информации просмотрите документацию по библиотеке.
Для добавления библиотеки аутентификации установите пакет, выполнив следующую команду:
dotnet add package Microsoft.Identity.Web
Шаг 3: Инициализация библиотеки аутентификации
Добавьте необходимый код для инициализации библиотеки аутентификации.
Откройте Startup.cs, затем в начале класса добавьте следующие using
объявления:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
Найдите функцию ConfigureServices(IServiceCollection services)
. Затем, перед строкой кода services.AddControllers();
, добавьте следующий фрагмент кода:
public void ConfigureServices(IServiceCollection services)
{
// Adds Microsoft Identity platform (Azure AD B2C) support to protect this Api
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
Configuration.Bind("AzureAdB2C", options);
options.TokenValidationParameters.NameClaimType = "name";
},
options => { Configuration.Bind("AzureAdB2C", options); });
// End of the Microsoft Identity platform block
services.AddControllers();
}
Найдите функцию Configure
. Затем, сразу после строки кода app.UseRouting();
, добавьте следующий фрагмент кода:
app.UseAuthentication();
После изменения ваш код должен выглядеть следующим образом:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
// Add the following line
app.UseAuthentication();
// End of the block you add
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Шаг 4: Добавьте конечные точки
Добавьте две конечные точки в ваш веб API:
- Анонимная конечная
/public
точка. Этот конечный пункт возвращает текущие дату и время. Используйте это для отладки вашего веб-API с анонимными вызовами. - Защищённая
/hello
точка подключения. Эта точка входа возвращает значениеname
утверждения в токене доступа.
Для добавления анонимного конечного пункта:
В папке /Controllers добавьте файл PublicController.cs, затем включите его в следующий фрагмент кода.
using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace TodoList.Controllers
{
[ApiController]
[Route("[controller]")]
public class PublicController : ControllerBase
{
private readonly ILogger<PublicController> _logger;
public PublicController(ILogger<PublicController> logger)
{
_logger = logger;
}
[HttpGet]
public ActionResult Get()
{
return Ok( new {date = DateTime.UtcNow.ToString()});
}
}
}
Чтобы добавить защищенный конечный пункт:
В папке /Controllers добавьте файл HelloController.cs, а затем добавьте его в следующий код.
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Identity.Web.Resource;
namespace TodoList.Controllers
{
[Authorize]
[RequiredScope("tasks.read")]
[ApiController]
[Route("[controller]")]
public class HelloController : ControllerBase
{
private readonly ILogger<HelloController> _logger;
private readonly IHttpContextAccessor _contextAccessor;
public HelloController(ILogger<HelloController> logger, IHttpContextAccessor contextAccessor)
{
_logger = logger;
_contextAccessor = contextAccessor;
}
[HttpGet]
public ActionResult Get()
{
return Ok( new { name = User.Identity.Name});
}
}
}
Контроллер HelloController
аннотирован атрибутом AuthorizeAttribute, который ограничивает доступ только для аутентифицированных пользователей.
Контроллер также украшен элементом [RequiredScope("tasks.read")]
.
RequiredScopeAttribute проверяет, вызывается ли веб-API с правильными областями. tasks.read
Шаг 5: Настройка веб-сервера
В среде разработки настройте веб API для прослушивания входящих HTTP или HTTPS запросов по номеру порта. В этом примере используйте HTTP-порт 6000 и HTTPS-порт 6001. Базовый URI веб-API будет http://localhost:6000
для HTTP и https://localhost:6001
для HTTPS.
Добавьте следующий фрагмент JSON в файл appsettings.json.
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:6000"
},
"Https": {
"Url": "https://localhost:6001"
}
}
}
Шаг 6. Настройка веб-API
Добавьте конфигурации в файл конфигурации. В файле содержится информация о вашем поставщике удостоверений Azure AD B2C. Приложение веб-API использует эту информацию для проверки токена доступа, который веб-приложение передает в качестве токена-носителя.
В корневой папке проекта откройте файл appsettings.json и затем добавьте следующие настройки.
{
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "contoso.onmicrosoft.com",
"ClientId": "<web-api-app-application-id>",
"SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
"SignUpSignInPolicyId": "<your-sign-up-in-policy>"
},
// More settings here
}
В файле appsettings.json обновите следующие свойства:
Секция | Ключ | Ценность |
---|---|---|
AzureAdB2C | Пример | Первая часть имени арендатора в Azure AD B2C tenant name (например, https://contoso.b2clogin.com ). |
AzureAdB2C | Домен | Полное имя клиента Azure AD B2C (например, contoso.onmicrosoft.com ). |
AzureAdB2C | ClientId | Идентификатор веб-приложения API. На предыдущей диаграмме это приложение с ID приложения: 2. Чтобы узнать, как получить идентификатор регистрации вашего приложения веб-API, см. Требования. |
AzureAdB2C | ИдентификаторПолитикиРегистрацииИВхода | Пользовательские потоки или пользовательская политика. Чтобы узнать, как получить путь пользователя или политику, см. Prerequisites. |
Шаг 7: Запустите и протестируйте веб-API
Наконец, запустите веб-API с настройками вашей среды Azure AD B2C.
В командной строке запустите веб-приложение, введя следующую команду:
dotnet run
Вы должны увидеть следующий вывод, который означает, что ваше приложение запущено и готово принимать запросы.
Now listening on: http://localhost:6000
Чтобы остановить программу, в командной оболочке нажмите Ctrl+C. Вы можете перезапустить приложение с помощью команды node app.js
.
Подсказка
Кроме того, для выполнения dotnet run
команды можно использовать отладчик Visual Studio Code. Встроенный отладчик Visual Studio Code помогает ускорить цикл редактирования, компиляции и отладки.
Откройте веб-браузер и перейдите по адресу http://localhost:6000/public
. В окне браузера должно отображаться следующее сообщение вместе с текущей датой и временем.
Шаг 8: Вызовите веб API из вашего приложения
Попробуйте вызвать защищённую конечную точку веб-API без токена доступа. Откройте веб-браузер и перейдите по адресу http://localhost:6000/hello
. API возвращает сообщение об ошибке HTTP без авторизации, подтверждая, что веб-API защищен маркером доступа.
Продолжайте настраивать свое приложение для вызова веб-API. Для получения информации смотрите раздел Prerequisites.
Посмотрите это видео, чтобы узнать о некоторых лучших практиках, когда вы интегрируете Azure AD B2C с API.
Связанный контент
Полный пример можно найти на GitHub.
- Получите веб API, используя Библиотеку идентификации Microsoft.