예제 #1
0
        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"]))
            });
        }
예제 #2
0
        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>()));
        }
예제 #3
0
        /// <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;
        }