예제 #1
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDiscoveryClient(Configuration);

            services.AddMvcCore().AddResponseFormatters();

            var identityServerSettings = new IdentityServerSettings();

            Configuration.Bind("IdentityServer", identityServerSettings);

            services.AddAuthentication("Bearer")
            .AddJwtBearer("Bearer", options =>
            {
                options.Authority = identityServerSettings.Host;

                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateAudience = false
                };

                options.RequireHttpsMetadata = false;
            });

            services.AddAuthorization(options =>
            {
                options.AddPolicy("ApiScope", policy =>
                {
                    policy.RequireAuthenticatedUser();
                    policy.RequireClaim("scope", "eventlogapi");
                });
            });

            services.AddSwaggerEx(ApplicationName);

            services.AddSingleton <IRepository <DeviceEvent> >(ioc => new Repository <DeviceEvent>(
                                                                   DeviceEventInitializer.Initialize()));
        }
예제 #2
0
        public static void AddCustomizedIdentityServer4(this IServiceCollection services, IdentityServerSettings config, IHostingEnvironment Environment)
        {
            IdentityServerInMemomryConfig xConfig = MapJsonToConfig(config);

            services.AddIdentityCore <User>()
            .AddEntityFrameworkStores <ApplicationDBContext>()
            .AddDefaultTokenProviders()
            .AddUserManager <UserManager <User> >()
            .AddSignInManager <ApplicationSignInManager>();

            services.Configure <IdentityOptions>(options =>
            {
                options.Password.RequireDigit           = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = false;
                options.Password.RequireLowercase       = false;
            }
                                                 );

            var builder = services.AddIdentityServer()
                          .AddInMemoryIdentityResources(xConfig.IdentityResources)
                          .AddInMemoryApiResources(xConfig.Apis)
                          .AddInMemoryClients(xConfig.Clients)
                          .AddAspNetIdentity <User>()
                          .AddResourceOwnerValidator <ASPIdentityPasswordValidator <User> >();

            if (Environment.IsDevelopment())
            {
                builder.AddDeveloperSigningCredential();
            }
            else
            {
                builder.AddDeveloperSigningCredential();
            }
        }
예제 #3
0
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(options =>
            {
                options.ReturnHttpNotAcceptable = true;
                options.OutputFormatters.RemoveType <HttpNoContentOutputFormatter>();
                options.InputFormatters.Add(new XmlSerializerInputFormatter(new MvcOptions()));
                options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
                options.FormatterMappings.SetMediaTypeMappingForFormat("xml", "application/xml");
            });
            services.AddControllers();
            #region Health Checks
            services.AddHealthChecks();
            services.AddHealthChecksUI().AddInMemoryStorage();
            #endregion
            #region Identity Server Config
            IdentityServerSettings identityServerSettings = new IdentityServerSettings();
            Configuration.GetSection("IdentityServerSettings").Bind(identityServerSettings);
            services.AddAuthentication("Bearer")
            .AddIdentityServerAuthentication("Bearer", options =>
            {
                options.ApiName   = identityServerSettings.ApiName;
                options.Authority = identityServerSettings.Authority;
            });
            #endregion
            #region Swagger Config
            SwaggerGenSettings swaggerGenSettings = new SwaggerGenSettings();
            Configuration.GetSection("SwaggerGenSettings").Bind(swaggerGenSettings);
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc(swaggerGenSettings.SwaggerDoc.name, swaggerGenSettings.SwaggerDoc.OpenApiInfo);
                SecurityDefinition securityDefinition = swaggerGenSettings.SecurityDefinition;
                Settings.Swagger.AuthorizationCode authorizationCode = securityDefinition.OpenApiSecurityScheme.AuthorizationCode;
                options.AddSecurityDefinition(securityDefinition.name, new OpenApiSecurityScheme
                {
                    Type  = securityDefinition.OpenApiSecurityScheme.SecuritySchemeType,
                    Flows = new OpenApiOAuthFlows
                    {
                        AuthorizationCode = new OpenApiOAuthFlow
                        {
                            AuthorizationUrl = new Uri(authorizationCode.AuthorizationUrl),
                            TokenUrl         = new Uri(authorizationCode.TokenUrl),
                            Scopes           = authorizationCode.Scopes
                        }
                    }
                });
                options.OperationFilter <AuthorizeCheckOperationFilter>();
            });
            #endregion
            #region Autofac Composition root
            // Install the container, using our configuration
            ContainerInstaller installer = new ContainerInstaller();
            ContainerBuilder   builder   = installer.Install();

            // Pull the .net core dependencies into the container, like controllers
            builder.Populate(services);

            IContainer container = builder.Build();
            #endregion
            // return the IServiceProvider implementation
            return(new AutofacServiceProvider(container));
        }
예제 #4
0
        /// <summary>
        ///     This method gets called by the runtime. Use this method to add services to the container.
        /// </summary>
        /// <param name="services"></param>
        public void ConfigureServices(IServiceCollection services)
        {
            var authenticationDbConnectionString =
                Configuration.GetConnectionString(ConnectionStringNameConstants.DefaultAuthenticationDatabase);

            services.AddScoped(options =>
            {
                var dbClient = new MongoClient(authenticationDbConnectionString);
                return(dbClient.GetDatabase(DatabaseContextNameConstants.AuthenticationDbContext));
            });

            services.AddScoped(options =>
            {
                var dbClient = options.GetService <IMongoDatabase>();
                var users    = dbClient.GetCollection <User>(DbCollectionNameConstants.Users);

                var userIndexesBuilder    = Builders <User> .IndexKeys;
                var uniqueIndexOptions    = new CreateIndexOptions();
                uniqueIndexOptions.Unique = true;
                var emailIndex            = new CreateIndexModel <User>(userIndexesBuilder.Ascending(user => user.Username),
                                                                        uniqueIndexOptions);
                users
                .Indexes
                .CreateOne(emailIndex);

                return(users);
            });

            services.AddHostedService <DummyHostedService>();
            services.AddScoped <IUserService, UserService>();

            // Add authorization handler.
            services.AddScoped(typeof(IAuthorizationHandler), typeof(SolidUserRequirementHandler));
            //services.AddScoped(typeof(IAuthorizationHandler), typeof(InRoleRequirementHandler));

            // Add mediator.
            services.AddMediatR(typeof(Startup).GetTypeInfo().Assembly);

            // Request validation.
            services.AddScoped(typeof(IPipelineBehavior <,>), typeof(RequestValidationBehavior <,>));

            // Get identity server 4 configuration.
            var identityServerSettings = new IdentityServerSettings();

            Configuration.GetSection(AppSettingKeyConstants.IdentityServer).Bind(identityServerSettings);

            services.AddAuthorization();

            services
            .AddIdentityServer()
            .AddMongoDatabaseAdapter(DatabaseContextNameConstants.AuthenticationDbContext,
                                     identityServerSettings.ClientsCollectionName,
                                     identityServerSettings.IdentityResourcesCollectionName,
                                     identityServerSettings.ApiResourcesCollectionName,
                                     identityServerSettings.PersistedGrantsCollectionName,
                                     provider =>
            {
                var dbClient = new MongoClient(new MongoUrl(authenticationDbConnectionString));
                return(dbClient.GetDatabase(identityServerSettings.DatabaseName));
            })
            .AddExpiredAccessTokenCleaner()
            .AddIdentityServerMongoDbService <AuthenticationDbService>().AddProfileService <ProfileService>()
            .AddResourceOwnerValidator <ResourceOwnerPasswordValidator>()
            .AddDeveloperSigningCredential();

            // Add jwt validation.
            services
            .AddAuthentication(options =>
            {
                options.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority            = identityServerSettings.Authority;
                options.ApiSecret            = identityServerSettings.ApiSecret;
                options.ApiName              = "profile";
                options.RequireHttpsMetadata = false;
                options.SaveToken            = true;
                options.SupportedTokens      = SupportedTokens.Reference;
            });

#if NETCOREAPP2_2
            // Add jwt validation.
            services
            .AddMvc(options =>
            {
                // only allow authenticated users
                var policy = new AuthorizationPolicyBuilder()
                             .RequireAuthenticatedUser()
                             .AddAuthenticationSchemes(IdentityServerAuthenticationDefaults.AuthenticationScheme)
                             .AddRequirements(new SolidUserRequirement())
                             .Build();

                options.Filters.Add(new AuthorizeFilter(policy));
            })
            .AddJsonOptions(options =>
            {
                var camelCasePropertyNamesContractResolver      = new CamelCasePropertyNamesContractResolver();
                options.SerializerSettings.ContractResolver     = camelCasePropertyNamesContractResolver;
                options.SerializerSettings.DefaultValueHandling = DefaultValueHandling.Ignore;
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
#elif NETCOREAPP3_0
            services
            .AddControllers(options =>
            {
                ////only allow authenticated users
                var policy = new AuthorizationPolicyBuilder()
                             .RequireAuthenticatedUser()
                             .AddAuthenticationSchemes(IdentityServerAuthenticationDefaults.AuthenticationScheme)
                             .AddRequirements(new SolidUserRequirement())
                             .Build();

                options.Filters.Add(new AuthorizeFilter(policy));
            })
            .AddFluentValidation(options =>
                                 options.RegisterValidatorsFromAssembly(typeof(Startup).Assembly))
            .AddNewtonsoftJson(options =>
            {
                var camelCasePropertyNamesContractResolver      = new CamelCasePropertyNamesContractResolver();
                options.SerializerSettings.ContractResolver     = camelCasePropertyNamesContractResolver;
                options.SerializerSettings.DefaultValueHandling = DefaultValueHandling.Ignore;
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
#endif
        }
예제 #5
0
 public AuthService(IOptions <IdentityServerSettings> options, HttpClient client)
 {
     _client         = client;
     _serverSettings = options.Value;
 }
예제 #6
0
 public AccountController()
 {
     IdentityServerSettings = IdentityServerSettings.Insance;
 }
예제 #7
0
 public ConfigService(IMapper mapper, ConfigurationDbContext context, IOptions <IdentityServerSettings> settings)
 {
     this.mapper   = mapper;
     this.context  = context;
     this.settings = settings.Value;
 }
예제 #8
0
 public LoginController(IHttpClientFactory httpClientFactory, IOptions <IdentityServerSettings> identityServerOptions)
 {
     _httpClientFactory      = httpClientFactory;
     _identityServerSettings = identityServerOptions.Value;
 }
예제 #9
0
 public AccountsController(UserManager <ApplicationUser> userManager, ApplicationDbContext appDbContext, IOptions <IdentityServerSettings> identityServerSettings)
 {
     this.userManager            = userManager;
     this.appDbContext           = appDbContext;
     this.identityServerSettings = identityServerSettings.Value;
 }