DependencyInjection.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using Microsoft.Extensions.Configuration;
  2. using Microsoft.Extensions.DependencyInjection;
  3. namespace AipGateway.API.Application.Pipeline.Authorization
  4. {
  5. public static class DependencyInjection
  6. {
  7. public static IServiceCollection AddJWTAuthorization(this IServiceCollection services, IConfiguration configuration)
  8. {
  9. services.AddHttpContextAccessor();
  10. #if false
  11. services.Configure<JwtSettings>(configuration.GetSection(JwtSettings.SectionName));
  12. services.AddTransient<ICurrentUserService, CurrentUserService.CurrentUserService>();
  13. services.AddSingleton<IDatetimeProvider, DatetimeProvider>()
  14. .AddSingleton<IJwtTokenGenerator, JwtTokenGenerator>();
  15. using (ServiceProvider serviceProvider = services.BuildServiceProvider())
  16. {
  17. var jwtOptions = serviceProvider.GetRequiredService<IOptions<JwtSettings>>().Value;
  18. services.AddAuthentication(options =>
  19. {
  20. options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
  21. options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
  22. options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
  23. })
  24. .AddJwtBearer(options =>
  25. {
  26. options.RequireHttpsMetadata = false;
  27. options.SaveToken = true;
  28. options.Events.SetJwtEvents();
  29. options.TokenValidationParameters = new TokenValidationParameters()
  30. {
  31. ValidateIssuerSigningKey = jwtOptions.ValidateIssuerSigningKey,
  32. IssuerSigningKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(jwtOptions.IssuerSigningKey)),
  33. ValidateIssuer = jwtOptions.ValidateIssuer,
  34. ValidIssuer = jwtOptions.ValidIssuer,
  35. ValidateAudience = jwtOptions.ValidateAudience,
  36. ValidAudience = jwtOptions.ValidAudience,
  37. RequireExpirationTime = jwtOptions.RequireExpirationTime,
  38. ValidateLifetime = jwtOptions.RequireExpirationTime,
  39. ClockSkew = TimeSpan.FromDays(1),
  40. };
  41. });
  42. services.AddAuthorization(options =>
  43. {
  44. var jwtAuthPolicyBuilder = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme);
  45. jwtAuthPolicyBuilder = jwtAuthPolicyBuilder.RequireAuthenticatedUser();
  46. options.AddPolicy(JwtBearerDefaults.AuthenticationScheme, jwtAuthPolicyBuilder.Build());
  47. });
  48. }
  49. #endif
  50. return services;
  51. }
  52. public static IServiceCollection AddRolePermissionAuthorization(this IServiceCollection services)
  53. {
  54. #if false
  55. services.AddAuthorization(options =>
  56. {
  57. foreach (var item in typeof(PermissionsToRole).GetProperties())
  58. {
  59. options.AddPolicy(
  60. item.Name,
  61. policyBuilder => policyBuilder
  62. .Requirements.Add(new IsAllowedRequirement(item.Name)));
  63. }
  64. //Application Admin only Policy
  65. options.AddPolicy(
  66. PolicyLegend.ApplicationAdminOnly,
  67. policyBuilder => policyBuilder
  68. .RequireClaim(ClaimTypes.Role).RequireRole("1"));
  69. //Application CorporateOnly Policy
  70. options.AddPolicy(
  71. PolicyLegend.AdminOnly,
  72. policyBuilder => policyBuilder
  73. .RequireClaim(ClaimTypes.Role).RequireRole("2", "1"));
  74. //Application CandidateOnly Policy
  75. options.AddPolicy(
  76. PolicyLegend.UserOnly,
  77. policyBuilder => policyBuilder
  78. .RequireClaim(ClaimTypes.Role).RequireRole("3", "1"));
  79. });
  80. services.AddScoped<IAuthorizationHandler, IsAllowedRequirementHandler>();
  81. #endif
  82. return services;
  83. }
  84. }
  85. }