AISGorod.AspNetCore.Authentication.Esia
1.0.0
See the version list below for details.
dotnet add package AISGorod.AspNetCore.Authentication.Esia --version 1.0.0
NuGet\Install-Package AISGorod.AspNetCore.Authentication.Esia -Version 1.0.0
<PackageReference Include="AISGorod.AspNetCore.Authentication.Esia" Version="1.0.0" />
paket add AISGorod.AspNetCore.Authentication.Esia --version 1.0.0
#r "nuget: AISGorod.AspNetCore.Authentication.Esia, 1.0.0"
// Install AISGorod.AspNetCore.Authentication.Esia as a Cake Addin #addin nuget:?package=AISGorod.AspNetCore.Authentication.Esia&version=1.0.0 // Install AISGorod.AspNetCore.Authentication.Esia as a Cake Tool #tool nuget:?package=AISGorod.AspNetCore.Authentication.Esia&version=1.0.0
AISGorod.AspNetCore.Authentication.Esia
Данная библиотека добавляет возможность авторизации через госуслуги (ЕСИА) по протоколу OpenID Connect, а также добавляет интерфейс доступа к REST-сервисам ЕСИА.
Требования
- AspNetCore не ниже 2.1.
- Сертификат ИС должен быть RS256 (не ГОСТ).
Подключение
- Добавьте NuGet-пакет
AISGorod.AspNetCore.Authentication.Esia
. - Добавьте в Startup.cs следующие строки (ниже данные для примера):
services
.AddAuthentication(...)
...
.AddEsia("Esia", options =>
{
options.Environment = EsiaEnvironmentType.Test;
options.Mnemonic = "TESTSYS";
options.Certificate = () => new X509Certificate2(System.IO.File.ReadAllBytes(@"c:\cert.pfx"), "");
options.Scope = new[] { "fullname", "snils", "email", "mobile" };
});
- Также убедитесь, что в Startup.cs есть подключение HttpContextAccessor:
services.AddHttpContextAccessor();
Пример кода смотрите в проекте
EsiaSample
. Необходимо только изменить Startup.cs.
Выполнение методов API
Необходимо в контроллере (или где-нибудь ещё) запросить интерфейс IEsiaRestService
.
В нём есть метод CallAsync
, который и отвечает за актуализацию токенов и общение с API ЕСИА.
Пример запроса:
var oId = User.Claims.First(i => i.Type == "sub").Value;
var contactsJson = await esiaRestService.CallAsync($"/rs/prns/{oId}/ctts?embed=(elements)", HttpMethod.Get);
ViewBag.Contacts = contactsJson.ToString(Newtonsoft.Json.Formatting.Indented);
Данный кусок кода получает oId пользователя, запрашивает все контакты и складывает их JSON-представление в ViewBag.
Генерация сертификатов (файлы *.pem, *.key и *.pfx)
Этот раздел больше походит на шпаргалку или мини-инструкцию для генерации сертификатов через openssl.
Сперва необходимо сгенерировать сертификат с приватным ключом.
Воспользуемся утилитой openssl (генерируется сертификат на 10 лет, что небезопасно):
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 3650
Данные о стране, городе, имени сертификата можно вбивать любые, они не играют роли для ЕСИА.
После успешного выполнения команды файл cert.pem
будет содержать искомый сертификат.
Именно этот файл необходимо прикладывать к заявками на подключение ИС к ЕСИА.
Файл key.pem
будет содержать зашифрованный закрытый (приватный) ключ.
Генерация сертификата в формате PKCS#12 (или PFX, это необходимо для .NET) выполняется следующей командой:
openssl pkcs12 -export -out key.pfx -inkey key.pem -in cert.pem
Есть замечания / хочу внести вклад
Создавайте issue, предлагайте свои pull request-ы.
Вместе мы сможем сделать отличную библиотеку. 😃
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.AspNetCore.Authentication.OpenIdConnect (>= 2.1.0)
- System.Security.Cryptography.Pkcs (>= 4.5.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.6.0 | 38 | 11/28/2024 |
1.6.0-preview1 | 41 | 11/28/2024 |
1.5.1 | 293 | 5/28/2024 |
1.5.0 | 2,039 | 11/25/2022 |
1.5.0-preview2 | 147 | 11/24/2022 |
1.5.0-preview1 | 169 | 11/21/2022 |
1.4.0 | 10,061 | 11/5/2020 |
1.3.0 | 652 | 6/1/2020 |
1.2.0 | 729 | 3/10/2020 |
1.1.0 | 682 | 12/30/2019 |
1.0.2 | 626 | 10/22/2019 |
1.0.1 | 696 | 8/27/2019 |
1.0.0 | 643 | 8/26/2019 |
Initial version.