Identity server что это
Перейти к содержимому

Identity server что это

  • автор:

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

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

Эскиз обложки облачных приложений .NET для электронной книги Azure.

IdentityServer — это сервер проверки подлинности, который реализует стандарты OpenID Connect (OIDC) и OAuth 2.0 для ASP.NET Core. Он предназначен для предоставления общего способа проверки подлинности запросов ко всем приложениям, будь то конечные точки веб-приложений, собственные, мобильные устройства или конечные точки API. IdentityServer можно использовать для реализации единого Sign-On (SSO) для нескольких приложений и типов приложений. Его можно использовать для проверки подлинности фактических пользователей с помощью форм входа и аналогичных пользовательских интерфейсов, а также проверки подлинности на основе служб, которая обычно включает выдачу маркеров, проверку и продление без какого-либо пользовательского интерфейса. 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, чтобы выступать в качестве маркеров безопасности для всех протоколов безопасности на основе маркеров. ПО промежуточного слоя IdentityServer предоставляет конечные точки для поддержки стандартных функций, в том числе:

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

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

IdentityServer4 доступен по двойной лицензии:

  • RPL — позволяет использовать IdentityServer4 бесплатно, если используется в работе с открытым кодом.
  • Платные — позволяет использовать IdentityServer4 в коммерческом сценарии.

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

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

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

IdentityServer поддерживает различные типы протоколов и поставщиков проверки подлинности социальных сетей, которые можно настроить в рамках каждой пользовательской установки. Обычно это делается в классе приложения Program ASP.NET Core (или в Startup классе в методе ConfigureServices ). Конфигурация включает в себя указание поддерживаемых протоколов и путей к серверам и конечным точкам, которые будут использоваться. На рис. 8-2 показан пример конфигурации, взятой из проекта пользовательского интерфейса быстрого запуска IdentityServer4:

public class Startup < public void ConfigureServices(IServiceCollection services) < services.AddMvc(); // some details omitted services.AddIdentityServer(); services.AddAuthentication() .AddGoogle("Google", options =>< options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme; options.ClientId = ""; options.ClientSecret = ""; >) .AddOpenIdConnect("demoidsrv", "IdentityServer", options => < options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme; options.SignOutScheme = IdentityServerConstants.SignoutScheme; options.Authority = "https://demo.identityserver.io/"; options.ClientId = "implicit"; options.ResponseType = "id_token"; options.SaveTokens = true; options.CallbackPath = new PathString("/signin-idsrv"); options.SignedOutCallbackPath = new PathString("/signout-callback-idsrv"); options.RemoteSignOutPath = new PathString("/signout-idsrv"); options.TokenValidationParameters = new TokenValidationParameters < NameClaimType = "name", RoleClaimType = "role" >; >); > > 

Рис. 8-2. Настройка IdentityServer.

Клиенты JavaScript

Многие облачные приложения используют серверные API и полнофункционарные одностраничные клиентские приложения (SPA) на интерфейсе. IdentityServer поставляет клиент JavaScript ( oidc-client.js ) через NPM, который можно добавить в spas, чтобы позволить им использовать IdentityServer для входа, выхода и проверки подлинности веб-API на основе маркеров.

Ссылки

  • Документация по IdentityServer
  • Типы приложений
  • Клиент JavaScript OIDC

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Кросс -платформный SSO Framework с использованием OpenID Connect и OAuth 2

Единый знак на фреймворке для создания решений управления доступом для современных веб -приложений и API. Упростить управление аутентификацией, централизация в одно место.

Идентификационный сервер

IdentityServer
  • Overview
  • Системные Требования
  • Функции
  • Инструкция по установке
  • Исследовать

Обзор

IdentityServer — это структура с открытым исходным кодом, которая использует OpenID Connect и OAuth 2.0 для достижения единого знака, действует как один сервер аутентификации и авторизации для нескольких приложений. IdentityServer поддерживает как Full .net Framework (4.5.x), так и .NET Core (которая является межплатформой). IdentityServer 4 принимает преимущества .NET Core и может быть развернут с помощью Docker в Linux Systems. Это следует за спецификациями Open ID Connect и OAuth 2.0 и поддерживает широкий спектр клиентов, таких как мобильные, Интернет и спа. Это агностика базы данных, поэтому вы можете использовать любой бэк-энд по вашему выбору. Он выступает в качестве сервера аутентификации, который позволит пользователям войти в систему и предоставляет токен для носителя JWT, который можно использовать для доступа к защищенным ресурсам из SPA или мобильного приложения. Его можно использовать для обеспечения аутентификации для мультитенантных приложений, размещенных в отдельных доменах. Он достигает приложения с использованием OIDC (который является аутентификационным слоем на вершине OAuth2).

Системные Требования

  • ASP.NET CORE 3.0
  • IIS / Docker

Функции

  • Аутентификация как услуга: -Одиночный вход /подпись
  • Контроль доступа для API
  • Поддерживает федеративные идентичности (Google, Facebook и т. Д.).
  • Пользовательская настройка
  • Многочисленные потоки (неявный, код авторизации и т. Д.).
  • API разрешение
  • Поставщик на основе претензий

Монтаж

Установите непосредственно из Nuget

Вы можете установить непосредственно из Nuget, используя следующую команду:

 Install-Package IdentityServer4 -Version 4.0.4 

Установить шаблоны IdentityServer4

 dotnet new -i IdentityServer4.Templates 

Добавить файлы QuickUI и идентификацию ASP.NET (необязательно)

 dotnet new is4aspid --force 

Обновление метода configureservices () в startup.cs, как ниже:

 services.AddControllersWithViews(); 

Также обновите метод configure () в startup.cs:

 app.UseRouting(); app.UseIdentityServer(); app.UseAuthorization(); app.UseEndpoints(endpoints => < endpoints.MapControllerRoute( name: "default", pattern: "//"); >); 

Создайте и запустите проект Просмотрите «/.well-known/openid-configuration», чтобы убедиться, что конечные точки Discovery работают.

работает в Docker

  1. Создайте пустой основной проект ASP.NET (проверьте ‘Включить поддержку Docker»)
  2. Убедитесь, что файл проекта нацелена на Linux OS Linux
  3. Измените файл Docker, как ниже:
 FROM microsoft/dotnet:2.2-runtime AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM microsoft/dotnet:2.2-sdk AS build WORKDIR /src COPY \[“JrTech.Identity.Web/JrTech.Identity.Web.csproj“, “JrTech.Identity.Web/”\] RUN dotnet restore “JrTech.Identity.Web/JrTech.Identity.Web.csproj“ COPY . . WORKDIR “/src/JrTech.Identity.Web” RUN dotnet build “JrTech.Identity.Web.csproj” -c Release -o /app FROM build AS publish RUN dotnet publish “JrTech.Identity.Web.csproj” -c Release -o /app FROM base AS final WORKDIR /app COPY –from=publish /app . ENTRYPOINT \[“dotnet”, “JrTech.Identity.Web.dll”\] 
  • Добавить IdentityServer 4, выполнив следующую команду:
 dotnet add package IdentityServer4 
Исследовать

Вы можете найти следующие ссылки актуальными:

IdentityServer, HttpClient и всё такое

Давно надо было опробовать IdentityServer4, который Microsoft выпустила три года назад, в декабре 2016-го.

IdentityServer4 — это полуфабрикат, из которого легко собрать работающий сервер аутентификации за двадцать минут. Если вы знаете, как его собирать.

Он реализует стандарты OpenID Connect и OAuth 2.0, он стыкуется с Google, Facebook и Azure Active Directory. Если вы разрабатываете Web API, берите IdentityServer4 для аутентификации — не ошибётесь.

Так я думал вначале недели. Сегодня четверг, и я у меня только что всё заработало. Почему так долго?

Радужное начало

В интернете есть документация, с помощью которой можно быстро разработать серверный и клиентский код аутентификации.

Кратко процесс выглядит так: создаём ASP.NET Core приложение, устанавливаем пакет IdentityServer4, подключаем готовые модули, конфигурируем и — наслаждаемся работающей аутентификацией.

Первый сценарий, о котором рассказывает руководство — это Client Credentials. В этом сценарии нет даже пользователей, он применяется, когда два независимых сервиса должны безопасно работать вместе.

Решение из этой главы состоит из трёх проектов — IdentityServer, Api и Client. IdentityServer — это приложение Web API, которое отвечает за аутентификацию и умеет создавать токены. Api — веб-приложение, которое отдаёт инофрмацию только доверенному клиенту. Client — консольное приложение, тот самый клиент.

В терминах стандартов OpenID и OAuth Клиент — это программа, а не пользователь.

Вначале клиент должен подключиться к серверу аутентификации и получить токен доступа. Код в статье выглядит так:

var client = new HttpClient(); var disco = await client.GetDiscoveryDocumentAsync("http://localhost:5000"); if (disco.IsError)  Console.WriteLine(disco.Error); return; > // request token var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest  Address = disco.TokenEndpoint, ClientId = "console", ClientSecret = "secret", Scope = "api1" >); 

И он не работет. После вызова GetDiscoveryDocumentAsync объект disco содержит сообщение об ошибке: Error connecting to http://localhost:5000/.well-known/openid-configuration: Service Unavailable.

Если я захожу по адресу http://localhost:5000/.well-known/openid-configuration, то вижу, что сервис работает и возвращает мне JSON.

 "issuer":"http://localhost:5000", "jwks_uri":"http://localhost:5000/.well-known/openid-configuration/jwks", "authorization_endpoint":"http://localhost:5000/connect/authorize", "token_endpoint":"http://localhost:5000/connect/token", "userinfo_endpoint":"http://localhost:5000/connect/userinfo", "end_session_endpoint":"http://localhost:5000/connect/endsession", "check_session_iframe":"http://localhost:5000/connect/checksession", "revocation_endpoint":"http://localhost:5000/connect/revocation", "introspection_endpoint":"http://localhost:5000/connect/introspect", "device_authorization_endpoint":"http://localhost:5000/connect/deviceauthorization", "frontchannel_logout_supported":true, "frontchannel_logout_session_supported":true, "backchannel_logout_supported":true, "backchannel_logout_session_supported":true, "scopes_supported": [ "openid", "api1","offline_access" ], "claims_supported": [ "sub" ], "grant_types_supported": [ "authorization_code", "client_credentials", "refresh_token", "implicit", "urn:ietf:params:oauth:grant-type:device_code" ], "response_types_supported": [ "code", "token", "id_token", "id_token token", "code id_token", "code token", "code id_token token" ], "response_modes_supported": [ "form_post", "query", "fragment" ], "token_endpoint_auth_methods_supported": [ "client_secret_basic", "client_secret_post" ], "id_token_signing_alg_values_supported": [ "RS256" ], "subject_types_supported": [ "public" ], "code_challenge_methods_supported": [ "plain","S256" ], "request_parameter_supported":true > 

Почему же не работает консольная программа?

Первая попытка

К счастью, объект disco содержит не только поля, возвращаемые сервером, но и данные HTTP-ответа. А HTTP-ответ в .NET ссылается на HTTP-запрос, так что мы можем попытаться понять, что у нас не так.

Поле HttpResponse.RequestMessage.RequestUri имеет значение http://192.168.7.24/. И, кажется, этот адрес совершенно не похож на http://localhost:5000, который мы видим в коде. 192.168.7.24 — IP-адрес моей машины, но почему вдруг localhost разрешается в него, а не в 127.0.0.1 и куда пропал порт 5000?

Сначала я решил проверить, а прослушивает ли IdentityServer внешний порт. Оказалось, что нет, потому что в настройках явно был указан хост http://localhost:5000.

launchSettings.json

 "iisSettings":  "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress":  "applicationUrl": "http://localhost:5000", "sslPort": 0 > >, "profiles":  "IIS Express":  "commandName": "Project", "launchBrowser": true, "environmentVariables":  "ASPNETCORE_ENVIRONMENT": "Development" > >, "SelfHost":  "commandName": "Executable", "environmentVariables":  "ASPNETCORE_ENVIRONMENT": "Development" >, "applicationUrl": "http://localhost:5000", "executablePath": "IdentityServer.exe" > > 

Чтобы сервер прослушивал все интерфейсы IPv4, в качестве applicaitonUri надо указать http://0.0.0.0:5000, а чтобы все интерфейсы IPv4 и IPv6 — http://*:5000.

Но сервер продолжал быть недоступным. Я решил, что, возможно, дело в файрволе и открыл порт 5000 на внешнем интерфейсе, вызвав команду netsh .

netsh advfirewall firewall add rule name="HTTP 5000" dir=in action=allow protocol=TCP localport=5000 

Chrome показывал мне правильный JSON, а клиент продолжал возвращать ошибку 503 Service Unavailable.

Вторая попытка

Я предположил, что дело в классе HttpClient , который осуществляет запрос к IdentityServer из приложения Client. На каком-то этапе он искажает URI, который я ему передал, и мне надо всего лишь выяснить, почему.

Обычно я неплох в Google. Однако, наступил момент, когда весь мой опыт мне не помог. Я придумывал десятки формулировок, пытаясь описать проблему разными способами, но интернет был безмолвен. HttpClient не изменяет переданный ему URI. Точка.

Тогда почему изменяет у меня? Что я сделал не так?

Прозрение

Теперь я знаю, что я сделал не так. Я поменял работу. На старой работе у нас не было файрвола, мы сидели в интернете напрямую. Теперь я работаю в банке и файрвол у меня есть. Его параметры настроены в Windows и Chrome их использует. А HttpClient из коробки — нет.

Чтобы включить прокси, надо добавить к HttpClient обработчик с настроенными параметрами.

Client\Program.cs

var httpHandler = new HttpClientHandler  Proxy = new WebProxy("192.168.7.100:8080")  BypassProxyOnLocal = true, UseDefaultCredentials = true, >, >; var client = new HttpClient(handler: httpHandler, disposeHandler: true); 

Для обращения к серверу Api консольная программа Client использует ещё один экземпляр HttpClient , который называется apiClient . Его тоже надо проинициализировать нашим обработчиком.

var apiClient = new HttpClient(handler: httpHandler, disposeHandler: true); 

Наконец, сервер Api сам обращается к IdentityServer, чтобы узнать, можно ли доверять клиенту. Это другой проект, поэтому мы должны продублировать код обработчика.

Api\Startupcs

services.AddAuthentication("Bearer") .AddJwtBearer("Bearer", options =>  options.Authority = "http://localhost:5000/"; options.RequireHttpsMetadata = false; options.Audience = "api1"; options.BackchannelHttpHandler = new HttpClientHandler  Proxy = new WebProxy("192.168.7.100:8080")  BypassProxyOnLocal = true, UseDefaultCredentials = true, >, >; >); 

Вот теперь консольное приложение показывает мне именно то, что я жду.

Вывод программы Client из документации по IdentityServer4

Заключение

Как я догадался, что дело в файрволе? Я не помню. Мне бы хотелось поделиться секретом решения нетривиальных задач, но как и в других случаях, я его не знаю. Я просто перебирал в голове разные варианты, пока не наткнулся на очевидный. Я его проверил, и он сработал.

Такова работа программиста: делаешь что-то и надеешься, что рано или поздно что-нибудь получится. Странный вывод через тридцать лет работы программистом, не правда ли?

Написать мне в Telegram

Навигация

WSO2 Identity Server — решение для централизованного управления доступом к различным веб-приложениям, сервисам и API. WSO2 IS — первый продукт к области Enterprise identity Bus (EIB) реализующий интеграцию различных сервисов идентификации с использованием различных протоколов.

В дополнении к ролевой модели безопасности (RBAC — role based access control) WSO2 IS реализует тонкий policy-based контроль доступа, в то время как поддержка различных протоколов SSO (OpenID, SAML и прочее) c реализацией трансформации токенов безопасноти позволяет обеспечивать сквозную интеграция между различными системами, включая ведущими облачными сервисами: Google Apps и Microsoft Office 365.

Ключевые возможности WSO2 Identity Server

  • API для интеграции с любыми приложениями;
  • Многофакторная авторизация;
  • Поддержка стандартов организации единой точки входа (SSO): OpenID, SAML2, Kerberos KDC;
  • Сквозная авторизация межлу внутренними и облачными системами;
  • Аудит через XDAS;
  • Поддержка протоколов OAuth 1.0a, OAuth 2.0, WS-Trust, OpenID, SAML2, и WS-Trust STS;
  • Интеграция с Microsoft SharePoint с поддержкой Passive STS;
  • Поддержка «из коробки» Google Apps и Salesforce;
  • Поддержка различных user store: встроенный LDAP, либо внешний LDAP, Microsoft Active Directory, Apache Cassandra или любая база данных;
  • Поддержка XACML 2.0/3.0;

Скачать WSO2 Identity Server вы можете на странице продукта на сайте WSO2: http://wso2.com/identity-and-access-management/

По вопросам внедрения и сопровождения WSO2 Identity Server обращайтесь в компанию ЕМДЕВ.

Что вы можете сделать с WSO2 Identity Server?

Включить простой вход

Единая точка входа (SSO)

Обеспечивает единый вход в несколько приложений для улучшения взаимодействия с пользователем.

Связать все

Identity federation

Обеспечивает доступ к веб-приложениям и мобильным приложениям через несколько доверенных доменов с использованием открытых стандартов идентификации (включая SAML, OIDC и WS-Federation).

Обеспечьте безопасный доступ

Многофакторная и адаптивная авторизация

Многофакторная и адаптивная аутентификация на основе контекста, риска и аттрибутов идентичности.

Обеспечьте быстрый и удобный доступ

Аутентификация без пароля

Обеспечьте защиту от фишинга и доступ с помощью ключа безопасности или биометрических данных с поддержкой FIDO2.

Предоставьте пользователям расширенный контроль над своими данными

Конфиденциальность и управление согласием

Записывайте, просматривайте и отзывайте согласие пользователя, соблюдая принципы конфиденциальности в соответствии с принципами проектирования и отраслевыми стандартами и правилами (например, GDPR и CCPA). Предоставляет пользователям контроль над своими личными данными.

Получите единое представление об API

Безопасность API

Безопасный доступ к API и микросервисам на основе открытых стандартов, таких как OAuth.

Признание аналитиков

WSO2 IDENTITY SERVER Является лидером в The KuppingerCole Leadership Compass: CIAM platforms, 2020

WSO2 IDENTITY SERVER назван «A Strong Performer» в The Forrester WaveTM: Управление идентификацией клиентов и доступом, 4 квартал 2020 г.

Преимущества

Гибкий

Легкий и расширяемый для поддержки сложных сценариев использования IAM. Ускоряет вывод на рынок.

Открытый исходный код

Прозрачность, поддержка сообщества и доступ к полному коду продукта.

Открытые стандарты

Поддерживает все стандарты идентификации (OIDC, SAML, OAuth, FIDO2) для аутентификации и федерации в разнородных системах и протоколах.

API-driven

Широкий спектр API-интерфейсов, в том числе для идентификации, управления пользователями и авторизации, необходимых для решений CIAM.

Всесторонний

Единое решение, обеспечивающее ряд возможностей IAM.

Легкое развертывание

Разверните локально, в облаке или на гибридных архитектурах.

Общая стоимость

Прозрачная ценовая политика и гибкая коммерческая модель.

Масштабируемый

Крупнейший клиент управляет более чем 106 миллионами учетных записей!

Видео и другие материалы

Сайт использует файлы cookie. Они позволяют узнавать вас и получать информацию о вашем пользовательском опыте. Это нужно, чтобы улучшать сайт. Посещая страницы сайта и предоставляя свои данные, вы позволяете нам предоставлять их сторонним партнерам. Если вы согласны, продолжайте пользоваться сайтом. Если нет – установите специальные настройки в браузере или обратитесь в техподдержку.

Простые решения для сложных B2B-процессов

(с) ООО «ЕМДЕВ», 2005-

Заказать консультацию Заказать консультацию

197022, Санкт-Петербург,
ул. Профессора Попова, д. 23,
литера В, помещение 3Н
+7 (812) 385-57-78

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *