Поделиться через


IdentityServer для облачных приложений

Кончик

Это фрагмент из электронной книги «Архитектура облачных нативных приложений .NET для Azure», доступен на .NET Docs или как бесплатный загружаемый PDF-файл, который можно прочитать в автономном режиме.

приложения Cloud Native .NET для эскиза обложки электронной книги Azure.

IdentityServer — это сервер проверки подлинности, реализующий стандарты OpenID Connect (OIDC) и OAuth 2.0 для ASP.NET Core. Он предназначен для предоставления общего способа проверки подлинности запросов ко всем приложениям, будь то веб-, собственные, мобильные или конечные точки API. IdentityServer можно использовать для реализации единого Sign-On входа для нескольких приложений и типов приложений. Его можно использовать для проверки подлинности фактических пользователей с помощью форм входа и аналогичных пользовательских интерфейсов, а также проверки подлинности на основе служб, которые обычно включают выдачу маркеров, проверку и продление без пользовательского интерфейса. IdentityServer предназначен для настраиваемого решения. Каждый экземпляр обычно настраивается в соответствии с потребностями отдельной организации и/или потребностями набора приложений.

Распространенные сценарии веб-приложения

Как правило, приложениям требуется поддержка некоторых или всех следующих сценариев:

  • Пользователи, обращающиеся к веб-приложениям с помощью браузера.
  • Пользователи, обращающиеся к серверным веб-API из приложений, работающих в браузере.
  • Пользователи на мобильных или нативных клиентах, обращающиеся к серверным веб-API.
  • Другие приложения, обращающиеся к внутренним веб-API (без активного пользователя или пользовательского интерфейса).
  • Любому приложению может потребоваться взаимодействовать с другими веб-API, используя собственное удостоверение или делегируя удостоверение пользователя.

типы приложений и сценарии

рис. 8-1. Типы приложений и сценарии.

В каждом из этих сценариев доступная функциональность должна быть защищена от несанкционированного использования. Как минимум, для этого обычно требуется проверка подлинности пользователя или участника, выполняющего запрос ресурса. Эта проверка подлинности может использовать один из нескольких распространенных протоколов, таких как SAML2p, WS-Fed или OpenID Connect. Взаимодействие с API обычно использует протокол OAuth2 и его поддержку маркеров безопасности. Разделение этих критически важных проблем безопасности и их реализации от самих приложений обеспечивает согласованность и повышает безопасность и удобство обслуживания. Аутсорсинг этих задач выделенному продукту, такому как IdentityServer, уменьшает необходимость для каждого приложения решать эти проблемы самостоятельно.

IdentityServer предоставляет посредническое ПО, которое выполняется в приложении ASP.NET Core и добавляет поддержку OpenID Connect и OAuth2 (см. поддерживаемые спецификации). Организации создадут собственное приложение ASP.NET Core с помощью ПО промежуточного слоя IdentityServer, которое будет выступать в качестве stS для всех протоколов безопасности на основе токенов. ПО промежуточного слоя IdentityServer предоставляет конечные точки для поддержки стандартных функциональных возможностей, в том числе:

  • Авторизация (проверка подлинности конечного пользователя)
  • Токен (запрос токена программным способом)
  • Обнаружение (метаданные о сервере)
  • Сведения о пользователе (получение сведений о пользователе с действительным токеном доступа)
  • Авторизация устройства (используется для запуска авторизации потока устройств)
  • Интроспекция (проверка токена)
  • Отзыв (отзыв токена)
  • Завершить сеанс (триггер единого выхода во всех приложениях)

Начало работы

IdentityServer доступен:

Дополнительные сведения о ценах на продукт см. на официальной странице.

Его можно добавить в приложения с помощью пакетов NuGet. Основной пакет — IdentityServer, который был скачан более четырех миллионов раз. Базовый пакет не включает код пользовательского интерфейса и поддерживает только конфигурацию в памяти. Для использования с базой данных также требуется поставщик данных, например Duende.IdentityServer.Storage, который использует Entity Framework Core для хранения конфигурации и операционных данных для IdentityServer. Для пользовательского интерфейса можно скопировать файлы из репозитория быстрого запуска UI в приложение ASP.NET Core MVC, чтобы добавить поддержку входа и выхода с помощью промежуточного слоя IdentityServer.

Конфигурация

IdentityServer поддерживает различные виды протоколов и поставщиков социальной проверки подлинности, которые можно настроить в рамках каждой пользовательской установки. Обычно это делается в классе Program приложения ASP.NET Core (или в классе Startup в методе ConfigureServices). Конфигурация включает указание поддерживаемых протоколов и путей к серверам и конечным точкам, которые будут использоваться. На рисунке 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) на клиентской стороне. IdentityServer поставляет клиент JavaScript (oidc-client.js) через NPM, который можно добавить в SPA, чтобы разрешить им использовать IdentityServer для входа, выхода и аутентификации на основе токенов веб-API. Кроме того, можно использовать механизм backend-for-frontend (BFF), который реализует все взаимодействия протокола безопасности с сервером токенов и спецификацией OAuth 2.0 IETF для Browser-Based приложений.

Ссылки