AuthenticationExtension.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System;
  2. using System.Text;
  3. using GxPress.Auth;
  4. using Microsoft.AspNetCore.Authentication.JwtBearer;
  5. using Microsoft.AspNetCore.Builder;
  6. using Microsoft.Extensions.Configuration;
  7. using Microsoft.Extensions.DependencyInjection;
  8. using Microsoft.Extensions.DependencyInjection.Extensions;
  9. using Microsoft.IdentityModel.Tokens;
  10. namespace GxPress.Api.ServiceExtensions
  11. {
  12. public static class AuthenticationExtension
  13. {
  14. /// <summary>
  15. /// 添加Jwt认证授权
  16. /// </summary>
  17. /// <param name="services"></param>
  18. /// <param name="configuration"></param>
  19. /// <returns></returns>
  20. public static IServiceCollection AddJwtAuthentication(this IServiceCollection services,
  21. IConfiguration configuration)
  22. {
  23. var jwtSection = configuration.GetSection("JwtOptions");
  24. var jwtOptions = new JwtOptions
  25. {
  26. Key = jwtSection["Key"],
  27. Issuer = jwtSection["Issuer"],
  28. Audience = jwtSection["Audience"],
  29. Expires = TimeSpan.FromDays(int.Parse(jwtSection["Expires"]))
  30. };
  31. services.AddHttpContextAccessor();
  32. services.Configure<JwtOptions>(jwtSection);
  33. services.TryAddSingleton<ILoginContext, LoginContext>();
  34. ////添加授权
  35. //services.AddAuthorization(options =>
  36. //{
  37. // options.AddPolicy("Permission", policy =>
  38. // {
  39. // policy.Requirements.Add(new PermissionRequirement());
  40. // });
  41. //});
  42. //services.AddSingleton<IAuthorizationHandler, PermissionHandler>();
  43. //添加认证
  44. services.AddAuthentication(options =>
  45. {
  46. options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
  47. options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
  48. })
  49. .AddJwtBearer(options =>
  50. {
  51. options.TokenValidationParameters = new TokenValidationParameters
  52. {
  53. ValidateIssuer = true,
  54. ValidateAudience = true,
  55. ValidateLifetime = true,
  56. ValidateIssuerSigningKey = true,
  57. ClockSkew = TimeSpan.FromMinutes(5),
  58. ValidIssuer = jwtOptions.Issuer,
  59. ValidAudience = jwtOptions.Audience,
  60. IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.Key))
  61. };
  62. });
  63. return services;
  64. }
  65. /// <summary>
  66. /// 使用jwt认证
  67. /// </summary>
  68. /// <param name="app"></param>
  69. /// <returns></returns>
  70. public static IApplicationBuilder UseJwtAuthorization(this IApplicationBuilder app)
  71. {
  72. app.UseAuthentication();
  73. app.UseAuthorization();
  74. return app;
  75. }
  76. }
  77. }