public static EsiaOptions GetOptions() { return(new EsiaOptions { ClientId = "CLIENT_ID", // Ваш идентификатор системы-клиента RedirectUri = EsiaConsts.EsiaAuthTestUrl, // Адрес перенаправления на страницу предоставления прав доступа в ЕСИА - либо тестовый, либо рабочий TokenUri = EsiaConsts.EsiaTokenTestUrl, // https-адрес ЕСИА для получения маркера доступа - либо тестовый, либо рабочий RestUri = EsiaConsts.EsiaRestTestUrl, // Адрес REST-сервиса ЕСИА для получения данных - либо тестовый, либо рабочий Scope = "http://esia.gosuslugi.ru/usr_inf", // Область доступа, т.е. запрашиваемые права. Можно указать несколько через пробел // Провайдер для получения сертификата системы-клиента. Обязан вернуть сертификат. В данном примере сертификат ищется на локальной машине по серийному номеру SignProvider = EsiaOptions.CreateSignProvider(() => { // Будем искать сертификат в личном хранилище на локальной машине X509Store storeMy = new X509Store(StoreName.My, StoreLocation.LocalMachine); storeMy.Open(OpenFlags.OpenExistingOnly); X509Certificate2Collection certColl = storeMy.Certificates.Find(X509FindType.FindBySerialNumber, WebConfigurationManager.AppSettings["AppCertSerial"], false); storeMy.Close(); return certColl[0]; }, // Action должен вернуть сертификат ЕСИА тестовый или рабочий. В данном примере ищем сертификат по его пути, указанном в конфигурационном файле () => new X509Certificate2(WebConfigurationManager.AppSettings["EsiaCertFile"])) }); }
public static AuthenticationBuilder AddEsia <TEsiaEvents, TEsiaHandler>( this AuthenticationBuilder builder, string authenticationScheme, string displayName, Action <EsiaOptions> configureOptions) where TEsiaEvents : OpenIdConnectEvents where TEsiaHandler : OpenIdConnectHandler { var esiaOptions = new EsiaOptions(); configureOptions(esiaOptions); IEsiaEnvironment esiaEnvironment = esiaOptions.EnvironmentInstance ?? new EsiaEnvironmentResolver(esiaOptions.Environment ?? throw new ArgumentNullException("Environment and EnvironmentInstance is null")).Resolve(); // register new services builder.Services.AddSingleton(esiaOptions); builder.Services.AddSingleton(esiaEnvironment); builder.Services.AddSingleton <TEsiaEvents>(); builder.Services.AddSingleton <OpenIdConnectOptionsBuilder>(); builder.Services.AddTransient <IEsiaRestService, EsiaRestService>(); builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IPostConfigureOptions <OpenIdConnectOptions>, OpenIdConnectPostConfigureOptions>()); var configBuilder = new OpenIdConnectOptionsBuilder(esiaOptions, esiaEnvironment); return(builder.AddRemoteScheme <OpenIdConnectOptions, TEsiaHandler>(authenticationScheme, displayName, configBuilder.BuildAction <TEsiaEvents>())); }
/// <summary> /// Initialize a new instance with ESIA client options passed to EsiaClient instance /// </summary> /// <param name="options">Base ESIA options</param> public EsiaAuthenticationOptions(EsiaOptions options) : base("ESIA") { if (options == null) { throw new ArgumentNullException("options"); } EsiaOptions = options; if (String.IsNullOrEmpty(EsiaOptions.CallbackUri)) { EsiaOptions.CallbackUri = new PathString("/esia-signin").ToString(); } AuthenticationMode = AuthenticationMode.Passive; Caption = "ЕСИА"; VerifyTokenSignature = true; GetUserInfo = true; }