/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }