AuthModule.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using Microsoft.AspNetCore.Authentication.JwtBearer;
  2. using Microsoft.IdentityModel.Tokens;
  3. namespace WebTemplate.ServerAspects.Auth;
  4. public class AuthModule : IAppConfigurationModule
  5. {
  6. public void ConfigureServices(IServiceCollection services, IConfigurationRoot config)
  7. {
  8. // GetRequiredSection throws an exception if the section is missing, so authOptions always has a value
  9. var authOptions = config.GetRequiredSection(AuthSettings.SectionName).Get<AuthSettings>()!;
  10. services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  11. .AddJwtBearer(options =>
  12. {
  13. options.Authority = authOptions.Authority;
  14. options.TokenValidationParameters = new TokenValidationParameters
  15. {
  16. ValidIssuer = authOptions.Authority,
  17. ValidAudience = authOptions.Audience
  18. };
  19. });
  20. services.AddAuthorization(authorizationOptions =>
  21. {
  22. foreach (var policyPair in authOptions.PolicyClaims)
  23. {
  24. authorizationOptions.AddPolicy(policyPair.Key,
  25. policyBuilder => policyBuilder.RequireClaim("permissions", policyPair.Value));
  26. }
  27. });
  28. }
  29. public void ConfigureApplication(WebApplication app)
  30. {
  31. app.UseAuthorization();
  32. }
  33. }