Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

2 недель назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Api;
  2. using Microsoft.AspNetCore.Authentication.JwtBearer;
  3. using Microsoft.AspNetCore.Hosting;
  4. using Microsoft.Extensions.DependencyInjection;
  5. using Microsoft.Extensions.Logging;
  6. using Microsoft.IdentityModel.Tokens;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.IdentityModel.Tokens.Jwt;
  10. using System.Linq;
  11. using System.Security.Claims;
  12. using System.Security.Cryptography;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using Microsoft.AspNetCore.Mvc.Testing;
  16. using Microsoft.IdentityModel.Protocols.OpenIdConnect;
  17. using Microsoft.AspNetCore.TestHost;
  18. namespace Tests
  19. {
  20. public static class MockJwtTokens
  21. {
  22. public static string Issuer { get; } = Guid.NewGuid().ToString();
  23. public static SecurityKey SecurityKey { get; }
  24. public static SigningCredentials SigningCredentials { get; }
  25. private static readonly JwtSecurityTokenHandler s_tokenHandler = new JwtSecurityTokenHandler();
  26. private static readonly RandomNumberGenerator s_rng = RandomNumberGenerator.Create();
  27. private static readonly byte[] s_key = new byte[32];
  28. static MockJwtTokens()
  29. {
  30. s_rng.GetBytes(s_key);
  31. SecurityKey = new SymmetricSecurityKey(s_key) { KeyId = Guid.NewGuid().ToString() };
  32. SigningCredentials = new SigningCredentials(SecurityKey, SecurityAlgorithms.HmacSha256);
  33. }
  34. public static string GenerateJwtToken(IEnumerable<Claim> claims)
  35. {
  36. return s_tokenHandler.WriteToken(new JwtSecurityToken(Issuer, null, claims, null, DateTime.UtcNow.AddMinutes(20), SigningCredentials));
  37. }
  38. }
  39. public class BaseIntegrationTest : WebApplicationFactory<Startup>
  40. {
  41. protected override void ConfigureWebHost(IWebHostBuilder builder)
  42. {
  43. builder.ConfigureTestServices(ConfigureServices);
  44. builder.ConfigureLogging((WebHostBuilderContext context, ILoggingBuilder loggingBuilder) =>
  45. {
  46. loggingBuilder.ClearProviders();
  47. loggingBuilder.AddConsole(options => options.IncludeScopes = true);
  48. });
  49. }
  50. protected virtual void ConfigureServices(IServiceCollection services)
  51. {
  52. services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options =>
  53. {
  54. var config = new OpenIdConnectConfiguration()
  55. {
  56. Issuer = MockJwtTokens.Issuer
  57. };
  58. config.SigningKeys.Add(MockJwtTokens.SecurityKey);
  59. options.Configuration = config;
  60. });
  61. }
  62. }
  63. }