Exemple #1
0
 /// <summary>
 /// Adds the required platform services.
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="config">The config.</param>
 /// <returns></returns>
 public static IId4MsServiceBuilder AddEmailService(this IId4MsServiceBuilder builder, IConfigurationSection config)
 {
     builder.Services.Configure <EmailSenderOptions>(config);
     builder.Services.AddTransient <IEmailSender, EmailSender>();
     builder.Services.AddTransient <EmailService>();
     return(builder);
 }
        /// <summary>
        /// Configures EF implementation of IPersistedGrantStore with IdentityServer.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="storeOptionsAction">The store options action.</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddTenantStore(
            this IId4MsServiceBuilder builder,
            Action <DbContextOptionsBuilder> storeOptionsAction = null)
        {
            builder.Services.AddDbContext <TenantDbContext>(storeOptionsAction);
            builder.Services.AddScoped <TenantDbContext>();

            return(builder);
        }
Exemple #3
0
 /// <summary>
 /// Adds the required platform services.
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <returns></returns>
 public static IId4MsServiceBuilder AddCoreService(this IId4MsServiceBuilder builder)
 {
     builder.Services.AddScoped <IPasswordHasher <AppUser>, IdentityMD5PasswordHasher>();
     builder.Services.AddSingleton <TenantService>();
     builder.Services.AddSingleton <RedisService>();
     builder.Services.AddSingleton <SwaggerCodeGenService>();
     builder.Services.AddSingleton <AzureStorageService>();
     //builder.Services.AddScoped<ApiLoggerService>();
     return(builder);
 }
        /// <summary>
        /// Adds the required platform services.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddAuthorization(this IId4MsServiceBuilder builder)
        {
            builder.Services.AddAuthorization(options =>
            {
                #region Client的权限策略
                var scopes = typeof(ClientScopes).GetFields();

                foreach (var scope in scopes)
                {
                    var scopeName = scope.GetRawConstantValue().ToString();

                    var scopeValues = scope.GetCustomAttribute <PolicyClaimValuesAttribute>().ClaimsValues;

                    options.AddPolicy(scopeName, policy => policy.RequireClaim(ClaimTypes.ClientScope, scopeValues));
                }
                #endregion

                #region User的权限策略
                var permissions = typeof(UserPermissions).GetFields();

                foreach (var permission in permissions)
                {
                    var permissionName = permission.GetRawConstantValue().ToString();

                    var permissionValues = permission.GetCustomAttribute <PolicyClaimValuesAttribute>().ClaimsValues;

                    options.AddPolicy(permissionName,
                                      policy => policy.RequireAssertion(context =>
                    {
                        var userPermissionClaim = context.User.Claims.FirstOrDefault(c => c.Type.Equals(ClaimTypes.UserPermission));

                        if (userPermissionClaim != null && !string.IsNullOrWhiteSpace(userPermissionClaim.Value))
                        {
                            var userPermissionClaimValue = userPermissionClaim.Value.ToLower().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);

                            if (userPermissionClaimValue != null && userPermissionClaimValue.Length > 0)
                            {
                                foreach (var userPermissionItem in userPermissionClaimValue)
                                {
                                    if (permissionValues.Contains(userPermissionItem))
                                    {
                                        return(true);
                                    }
                                }
                            }
                        }

                        return(false);
                    }));
                }
                #endregion
            });

            return(builder);
        }
        /// <summary>
        /// Configures EF implementation of IPersistedGrantStore with IdentityServer.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="storeOptionsAction">The store options action.</param>
        /// <param name="identityOptions">The identity options action.</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddIdentityStore(
            this IId4MsServiceBuilder builder,
            Action <DbContextOptionsBuilder> storeOptionsAction = null, Action <IdentityOptions> identityOptions = null)
        {
            builder.Services.AddDbContext <IdentityDbContext>(storeOptionsAction);
            builder.Services.AddScoped <IdentityDbContext>();

            builder.Services.AddIdentity <AppUser, AppRole>(identityOptions)
            .AddEntityFrameworkStores <IdentityDbContext>()
            .AddDefaultTokenProviders();

            return(builder);
        }
Exemple #6
0
        /// <summary>
        /// Configures SqlCache Service
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="connection">database connection string</param>
        /// <param name="schemaName">table schemaName</param>
        /// <param name="tableName">table name</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddSqlCacheStore(
            this IId4MsServiceBuilder builder,
            string connection, string schemaName = "dbo", string tableName = "AppCache")
        {
            builder.Services.AddDistributedSqlServerCache(options =>
            {
                options.ConnectionString = connection;
                options.SchemaName       = schemaName;
                options.TableName        = tableName;
            });

            return(builder);
        }
Exemple #7
0
        /// <summary>
        /// Configures EF implementation of IdentityStore with IdentityServer.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="DbContextOptions">The store options action.</param>
        /// <param name="identityOptions">The identity options action.</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddIdentityStore(
            this IId4MsServiceBuilder builder,
            Action <DbContextOptionsBuilder> DbContextOptions,
            Action <IdentityOptions> identityOptions = null)
        {
            builder.Services.AddDbContext <UserDbContext>(DbContextOptions);

            builder.Services.AddScoped <UserDbContext>();

            builder.Services.AddScoped <UserManager <AppUser> >();

            builder.Services.AddIdentity <AppUser, AppRole>(identityOptions)
            .AddDefaultUI(UIFramework.Bootstrap4)
            .AddEntityFrameworkStores <UserDbContext>()
            .AddDefaultTokenProviders();

            return(builder);
        }
Exemple #8
0
        /// <summary>
        /// Configures EF implementation of TenantStore with IdentityServer.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="DbContextOptions">The store options action.</param>
        /// <param name="configuration">The configuration.</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddIdentityServer(
            this IId4MsServiceBuilder builder,
            Action <DbContextOptionsBuilder> DbContextOptions, IConfiguration configuration)
        {
            builder.Services.AddIdentityServer(config =>
            {
                // keep same Issuer for banlancer
                config.IssuerUri = configuration["IdentityServer"];
                // config.PublicOrigin = "";
                // config.Discovery.CustomEntries.Add("custom_endpoint", "~/api/custom");
            })
            .AddSigningCredential(GetSigningCredential(configuration))
            .AddCustomAuthorizeRequestValidator <TenantAuthorizeRequestValidator>()
            .AddCustomTokenRequestValidator <TenantTokenRequestValidator>()
            .AddConfigurationStore(x => x.ConfigureDbContext = DbContextOptions)
            .AddOperationalStore(x => x.ConfigureDbContext   = DbContextOptions)
            .AddExtensionGrantValidator <MobileCodeGrantValidator>()
            .AddAspNetIdentity <AppUser>();

            return(builder);
        }
        /// <summary>
        /// Adds the required platform services.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddAzureStorageService(this IId4MsServiceBuilder builder)
        {
            builder.Services.AddSingleton <AzureStorageService>();

            return(builder);
        }
        /// <summary>
        /// Adds the required platform services.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddSwaggerCodeGenService(this IId4MsServiceBuilder builder)
        {
            builder.Services.AddSingleton <SwaggerCodeGenService>();

            return(builder);
        }
        /// <summary>
        /// Adds the required platform services.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddTenantService(this IId4MsServiceBuilder builder)
        {
            builder.Services.AddSingleton <TenantService>();

            return(builder);
        }
        /// <summary>
        /// Adds the required platform services.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddApiLoggerService(this IId4MsServiceBuilder builder)
        {
            builder.Services.AddScoped <ApiLoggerService>();

            return(builder);
        }
        /// <summary>
        /// Adds the required platform services.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <returns></returns>
        public static IId4MsServiceBuilder AddAppUserMD5PasswordHasher(this IId4MsServiceBuilder builder)
        {
            builder.Services.AddScoped <IPasswordHasher <AppUser>, IdentityMD5PasswordHasher>();

            return(builder);
        }