|
- using Api;
- using Microsoft.AspNetCore.Authentication.JwtBearer;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Logging;
- using Microsoft.IdentityModel.Tokens;
- using System;
- using System.Collections.Generic;
- using System.IdentityModel.Tokens.Jwt;
- using System.Linq;
- using System.Security.Claims;
- using System.Security.Cryptography;
- using System.Text;
- using System.Threading.Tasks;
- using Microsoft.AspNetCore.Mvc.Testing;
- using Microsoft.IdentityModel.Protocols.OpenIdConnect;
- using Microsoft.AspNetCore.TestHost;
-
- namespace Tests
- {
- public static class MockJwtTokens
- {
- public static string Issuer { get; } = Guid.NewGuid().ToString();
- public static SecurityKey SecurityKey { get; }
- public static SigningCredentials SigningCredentials { get; }
-
- private static readonly JwtSecurityTokenHandler s_tokenHandler = new JwtSecurityTokenHandler();
- private static readonly RandomNumberGenerator s_rng = RandomNumberGenerator.Create();
- private static readonly byte[] s_key = new byte[32];
-
- static MockJwtTokens()
- {
- s_rng.GetBytes(s_key);
- SecurityKey = new SymmetricSecurityKey(s_key) { KeyId = Guid.NewGuid().ToString() };
- SigningCredentials = new SigningCredentials(SecurityKey, SecurityAlgorithms.HmacSha256);
- }
-
- public static string GenerateJwtToken(IEnumerable<Claim> claims)
- {
- return s_tokenHandler.WriteToken(new JwtSecurityToken(Issuer, null, claims, null, DateTime.UtcNow.AddMinutes(20), SigningCredentials));
- }
- }
- public class BaseIntegrationTest : WebApplicationFactory<Startup>
- {
- protected override void ConfigureWebHost(IWebHostBuilder builder)
- {
- builder.ConfigureTestServices(ConfigureServices);
- builder.ConfigureLogging((WebHostBuilderContext context, ILoggingBuilder loggingBuilder) =>
- {
- loggingBuilder.ClearProviders();
- loggingBuilder.AddConsole(options => options.IncludeScopes = true);
- });
- }
-
- protected virtual void ConfigureServices(IServiceCollection services)
- {
- services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options =>
- {
- var config = new OpenIdConnectConfiguration()
- {
- Issuer = MockJwtTokens.Issuer
- };
-
- config.SigningKeys.Add(MockJwtTokens.SecurityKey);
- options.Configuration = config;
- });
- }
- }
- }
|