public async Task <string> GetEmailConfirmationToken(Guid userId) { var now = DateTime.UtcNow; List <Claim> claim = new List <Claim> { new Claim(type: "id", value: userId.ToString()) }; ClaimsIdentity claims = new ClaimsIdentity(claim, "Bearer", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType); var jwt = new JwtSecurityToken( issuer: AuthUtils.ISSUER, audience: AuthUtils.AUDIENCE, notBefore: now, claims: claims.Claims, expires: now.Add(TimeSpan.FromMinutes(AuthUtils.LIFETIME)), signingCredentials: new SigningCredentials(AuthUtils.GetEmailConfirmationSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256)); var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt); return(encodedJwt); }
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = AuthUtils.ISSUER, ValidateAudience = true, ValidAudience = AuthUtils.AUDIENCE, ValidateLifetime = true, IssuerSigningKey = AuthUtils.GetSymmetricSecurityKey(), ValidateIssuerSigningKey = true, ClockSkew = TimeSpan.FromMinutes(5) }; }).AddJwtBearer("EmailConfirmation", options => { options.RequireHttpsMetadata = false; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = AuthUtils.ISSUER, ValidateAudience = true, ValidAudience = AuthUtils.AUDIENCE, ValidateLifetime = true, IssuerSigningKey = AuthUtils.GetEmailConfirmationSymmetricSecurityKey(), ValidateIssuerSigningKey = true, ClockSkew = TimeSpan.FromMinutes(5) }; }); if (_env.IsDevelopment()) { services.AddSingleton <IAuthorizationHandler, AllowAnonymous>(); } services.AddDbContext <MDContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddSingleton <SnakeCaseConverter>(); services.AddTransient <ICardRepository, CardRepository>(); services.AddTransient <IUserRepository, UserRepository>(); services.AddTransient <ContentSaver>(); services.AddTransient <IUserDeckRepository, UserDeckRepository>(); services.AddTransient <IDeckRepository, DeckRepository>(); services.AddTransient <ISessionRepository, SessionRepository>(); services.AddTransient <ITokenRepository, TokenRepository>(); services.AddTransient <ISubscribeRepository, SubscribeRepository>(); services.AddTransient <IFileRepository, FileRepository>(); services.AddTransient <IAuthFacade, AuthFacade>(); services.AddTransient <MailService>(); services.AddTransient <ContentSaver>(); services.AddTransient <AuthUtils>(); services.AddTransient <GetDecksForTrainUseCase>(); services.AddTransient <GetNewTokensUseCase>(); services.AddTransient <RefreshTokensUseCase>(); services.AddTransient <UpdateDeckUseCase>(); services.AddTransient <SignUpWithGoogleUseCase>(); services.AddTransient <SignUpWithEmailUseCase>(); services.AddTransient <SignInWithEmailUseCase>(); services.AddScoped <DeleteDeckUseCase>(); services.AddTransient <SignInWithUsernameUseCase>(); services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyDeck API", Version = "v1" }); }); }