Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Кончик
Это фрагмент из электронной книги «Архитектура облачных нативных приложений .NET для Azure», доступен на .NET Docs или как бесплатный загружаемый PDF-файл, который можно прочитать в автономном режиме.
Duende IdentityServer — это платформа для создания сервера проверки подлинности, совместимого с стандартами OpenID Connect (OIDC) и OAuth 2.x, с помощью ASP.NET Core.
Он предназначен для предоставления общего способа проверки подлинности запросов ко всем приложениям, независимо от того, являются ли они веб-, собственными, мобильными или конечными точками API. IdentityServer можно использовать для реализации единого Sign-On входа для нескольких приложений и типов приложений. Его можно использовать для проверки подлинности фактических пользователей с помощью форм входа и аналогичных пользовательских интерфейсов, а также проверки подлинности на основе служб, которые обычно включают выдачу маркеров, проверку и продление без пользовательского интерфейса. Он также может выступать в качестве шлюза федерации для объединения поставщиков проверки подлинности.
IdentityServer предназначен для настраиваемого решения. Каждый экземпляр обычно настраивается, чтобы соответствовать требованиям отдельной организации или нуждам набора приложений.
Распространенные сценарии веб-приложения
Как правило, приложениям требуется поддержка некоторых или всех следующих сценариев:
- Пользователи, обращающиеся к веб-приложениям с помощью браузера.
- Пользователи, обращающиеся к серверным веб-API из приложений, работающих в браузере.
- Пользователи на мобильных или нативных клиентах, обращающиеся к серверным веб-API.
- Другие приложения, обращающиеся к внутренним веб-API (без активного пользователя или пользовательского интерфейса).
- Любому приложению может потребоваться взаимодействовать с другими веб-API, используя собственное удостоверение или делегируя удостоверение пользователя.
рис. 8-1. Типы приложений и сценарии.
В каждом из этих сценариев доступная функциональность должна быть защищена от несанкционированного использования. Как минимум, для этого обычно требуется проверка подлинности пользователя или участника, выполняющего запрос ресурса. Эта проверка подлинности может использовать один из нескольких распространенных протоколов, таких как SAML2p, WS-Fed или OpenID Connect. Взаимодействие с API обычно использует протокол OAuth 2 и его поддержку маркеров безопасности. Разделение этих критически важных проблем безопасности и их реализации от самих приложений обеспечивает согласованность и повышает безопасность и удобство обслуживания. Аутсорсинг этих задач выделенному продукту, такому как IdentityServer, уменьшает необходимость для каждого приложения решать эти проблемы самостоятельно.
IdentityServer предоставляет ПО промежуточного слоя, которое выполняется в приложении ASP.NET Core и добавляет поддержку OpenID Connect и OAuth 2.x (см. поддерживаемые спецификации). С помощью IdentityServer организации могут создавать собственные приложения ASP.NET Core посредством промежуточного слоя IdentityServer, функционирующего в качестве сервера авторизации для всех их протоколов безопасности на основе токенов. ПО промежуточного слоя IdentityServer предоставляет конечные точки для поддержки стандартных функциональных возможностей, в том числе:
- Авторизация (проверка подлинности конечного пользователя)
- Токен (запрос токена программным способом)
- Обнаружение (метаданные о сервере)
- Сведения о пользователе (получение сведений о пользователе с действительным токеном доступа)
- Авторизация устройства (используется для запуска авторизации потока устройств)
- Интроспекция (проверка токена)
- Отзыв (отзыв токена)
- Завершить сеанс (триггер единого выхода во всех приложениях)
- Запросы на принудительную авторизацию (для более безопасного процесса аутентификации)
Начало работы
IdentityServer доступен:
- С лицензией сообщества, позволяющей вам использовать IdentityServer бесплатно для малых предприятий и некоммерческих организаций (условия применяются)
- Платная версия даёт возможность использовать IdentityServer в коммерческом сценарии
Дополнительные сведения о ценах на продукт см. на официальной странице.
Его можно добавить в приложения с помощью пакетов NuGet. Основной пакет — IdentityServer, который был скачан более четырех миллионов раз. Базовый пакет не включает код пользовательского интерфейса и поддерживает только конфигурацию в памяти. Для использования с базой данных также требуется поставщик данных, например Duende.IdentityServer.Storage, который использует Entity Framework Core для хранения конфигурации и операционных данных для IdentityServer. Для пользовательского интерфейса можно скопировать файлы из репозитория примеров в приложение ASP.NET Core MVC, чтобы добавить поддержку входа и выхода с помощью промежуточного слоя IdentityServer.
Конфигурация
IdentityServer поддерживает различные виды протоколов и поставщиков социальной проверки подлинности, которые можно настроить в рамках каждой пользовательской установки. Обычно это делается в классе приложения Program ASP.NET Core. Конфигурация включает указание поддерживаемых протоколов и путей к серверам и конечным точкам, которые будут использоваться. На рисунке 8-2 показан пример конфигурации, взятой из краткого руководства IdentityServer для ASP.NET Core приложений проекта.
// some details omitted
builder.Services.AddIdentityServer();
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddGoogle("Google", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.ClientId = "<insert here>";
options.ClientSecret = "<insert here>";
})
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "https://localhost:5001";
options.ClientId = "web";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("profile");
options.MapInboundClaims = false; // Don't rename claim types
options.SaveTokens = true;
});
}
рис. 8-2. Настройка IdentityServer.
Клиенты JavaScript
Многие облачные нативные приложения используют серверные API и полнофункциональные клиентские одностраничные приложения (SPAs) на интерфейсной стороне, например, с помощью React, Angular или Blazor WebAssembly. Шаблон backend-for-frontend (BFF) используется для этих типов клиентов, что позволяет сохранить токены вне доступа браузера. Этот шаблон следует спецификации IETF OAuth 2.0 для приложений на основе браузера.