public Tests() { Startup.Initialize(); IConfiguration configuration = Startup.GetIConfiguration(TestContext.CurrentContext.TestDirectory); JwtTokenConfigurations.Load(configuration); Utility authUtility = new Utility(configuration.GetValue <string>("ConnectionStrings:DefaultConnection"), "Auth"); Utility userTokenUtility = new Utility(configuration.GetValue <string>("ConnectionStrings:DefaultConnection"), "UserTokens"); AzureTableUserStore <AzureTableUser> azureTableUserStore = new AzureTableUserStore <AzureTableUser>(authUtility.Table, userTokenUtility); var loggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); }); AzureTableUserManager userManager = new AzureTableUserManager( store: new AzureTableUserStore <AzureTableUser>(authUtility.Table, userTokenUtility), optionsAccessor: new OptionsAccessor <IdentityOptions>(), passwordHasher: new PasswordHasher <AzureTableUser>(), userValidators: new List <IUserValidator <AzureTableUser> >() { new UserValidator <AzureTableUser>() }, passwordValidators: new List <IPasswordValidator <AzureTableUser> >() { new PasswordValidator <AzureTableUser>() }, keyNormalizer: new LookupNormalizer(), errors: new IdentityErrorDescriber(), services: null, logger: loggerFactory.CreateLogger <UserManager <AzureTableUser> >(), textResourceManager: new Nivra.Localization.TextResourceManager(), emailSender: new EmailSender(new AuthMessageSenderOptions() { SendGridKey = "", SendGridUser = "" }), userTokenUtility: userTokenUtility ); accountController = new Controllers.AccountController(Startup.AzureTableRepo, Startup.AuthUtility, Startup.UserTokenUtility, userManager); // _email = Startup.Dict["Email"]; _password = Startup.Dict["Password"]; }
public AccountController( UserManager <ApplicationUser> userManager, SignInManager <ApplicationUser> signInManager, ILoggerFactory loggerFactory, [FromServices] JwtTokenConfigurations jwtTokenConfigurations, [FromServices] SigningCredentialsConfigurations signingConfigurations, IDomainNotificationHandler <DomainNotification> notifications, IBus bus, IUser user) : base(notifications, bus, user) { _userManager = userManager; _signInManager = signInManager; _bus = bus; _logger = loggerFactory.CreateLogger <AccountController>(); _jwtTokenConfigurations = jwtTokenConfigurations; _signingConfigurations = signingConfigurations; }
public AccountController(UserManager <ApplicationUser> userManager, SignInManager <ApplicationUser> signManager, INotificationHandler <DomainNotification> notifications, ILoggerFactory loggerFactory, [FromServices] JwtTokenConfigurations jwtTokenConfigurations, [FromServices] SigningCredentialsConfigurations signingConfigurations, IMediatorHandler mediator, IOrganizadorRepository organizadorRepository, IUser user) : base(notifications, user, mediator) { _userManager = userManager; _signManager = signManager; _mediator = mediator; _logger = loggerFactory.CreateLogger <AccountController>(); _organizadorRepository = organizadorRepository; _jwtTokenConfigurations = jwtTokenConfigurations; _signingConfigurations = signingConfigurations; }
public static IServiceCollection AddJwtSecurity( this IServiceCollection services, SigningCredentialsConfigurations signinConfigurations, JwtTokenConfigurations tokenConfigurations) { return services; services.AddMvc(options => { // Adiciona a policy no filtro de autenticação options.Filters.Add(new AuthorizeFilter(policy)); } }
public static void AddMvcSecurity(this IServiceCollection services, IConfiguration Configuration) { if (services == null) { throw new ArgumentException(nameof(services)); } // Ativando a utilização do ASP.NET Identity, a fim de // permitir a recuperação de seus objetos via injeção de dependências services.AddIdentity <ApplicationUser, IdentityRole>() .AddEntityFrameworkStores <ApplicationDbContext>() .AddDefaultTokenProviders(); var signinConfigurations = new SigningCredentialsConfigurations(); services.AddSingleton(signinConfigurations); var tokenConfigurations = new JwtTokenConfigurations(); new ConfigureFromConfigurationOptions <JwtTokenConfigurations>( Configuration.GetSection(nameof(JwtTokenConfigurations))) .Configure(tokenConfigurations); services.AddSingleton(tokenConfigurations); services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(options => { var validatonParameters = options.TokenValidationParameters; validatonParameters.IssuerSigningKey = signinConfigurations.Key; validatonParameters.ValidateAudience = true; validatonParameters.ValidAudience = tokenConfigurations.Audience; validatonParameters.ValidateIssuer = true; validatonParameters.ValidIssuer = tokenConfigurations.Issuer; // Valida a assinatura de um token recebido validatonParameters.ValidateIssuerSigningKey = true; validatonParameters.RequireExpirationTime = true; // Verifica se um token recebido ainda é válido validatonParameters.ValidateLifetime = true; // Tempo de tolerância para a expiração de um token (utilizado // caso haja problemas de sincronismo de horário entre diferentes // computadores envolvidos no processo de comunicação) validatonParameters.ClockSkew = TimeSpan.Zero; }); // Ativa o uso do token como forma de autorizar o acesso // a recursos deste projeto services.AddAuthorization(options => { options.AddPolicy("PodeConsultar", policy => policy.RequireClaim("Eventos", "Consultar")); options.AddPolicy("PodeGravar", policy => policy.RequireClaim("Eventos", "Gravar")); options.AddPolicy("PodeExcluir", policy => policy.RequireClaim("Eventos", "Excluir")); options.AddPolicy("Bearer", new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser() .Build()); }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddIdentityCore <AzureTableUser>(options => options.SignIn.RequireConfirmedAccount = true ) //.AddTokenProvider<EmailConfirmationTokenProvider<AzureTableUser>>(TokenOptions.DefaultProvider) .AddTokenProvider <PasswordResetTokenProvider <AzureTableUser> >(TokenOptions.DefaultProvider) //.AddTokenProvider<ChangePhoneNumberTokenProvider<AzureTableUser>>(TokenOptions.DefaultProvider) //.AddTokenProvider<EmailTokenProvider<AzureTableUser>>("ChangePhoneNumber") .AddTokenProvider <UserTwoFactorTokenProvider>(TokenOptions.DefaultProvider) //.AddTokenProvider<DataProtectorTokenProvider<AzureTableUser>>(TokenOptions.DefaultProvider) .AddTokenProvider <AppEmailConfirmationTokenProvider <AzureTableUser> >("EmailConfirmationTokenProvider") //.AddTokenProvider<PasswordResetTokenProvider<AzureTableUser>>("PasswordReset") //.AddTokenProvider<ChangePhoneNumberTokenProvider<AzureTableUser>>("ChangePhoneNumber") ////.AddTokenProvider<EmailTokenProvider<AzureTableUser>>("ChangePhoneNumber") //.AddTokenProvider<UserTwoFactorTokenProvider>("TwoFactorTokenProvider") // .AddTokenProvider<DataProtectorTokenProvider<AzureTableUser>>(TokenOptions.DefaultProvider) .AddDefaultTokenProviders() ; AzureTableRepo azureTableRepo = new AzureTableRepo(); Nivra.AzureOperations.Utility utility = new Nivra.AzureOperations.Utility(Configuration["ConnectionStrings:DefaultConnection"], "Auth"); //Configuring CORS services.AddCors(config => { config.AddPolicy("AllowAll", builder => { builder.WithOrigins(Configuration["AllowedHosts"]) .AllowAnyMethod() .AllowAnyHeader(); }); }); // // Configuring PasswordHasher //services.Configure<PasswordHasherOptions>(options => //{ // options.HashAlgorithm = PasswordHasherAlgorithms.SHA1; // options.SaltSize = 16; // options.IterationCount = 8192; //}); //// Registering PasswordHasher //services.AddPasswordHasher(); //services.AddIdentity<AzureTableUser, AzureTableRole>(); JwtTokenConfigurations.Load(Configuration); services.AddGenericJwtAuthService(); var tables = AzureTables.InitializeAzureTables(Configuration["ConnectionStrings:DefaultConnection"], "Auth"); foreach (var table in tables) { azureTableRepo.Collection.Add(table.Name, table); } services.AddSingleton <IAzureTableRepo>(azureTableRepo); services.AddSingleton <Nivra.AzureOperations.Utility>(utility); // Register the Swagger generator, defining 1 or more Swagger documents services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); }); services.AddControllersWithViews() .AddNewtonsoftJson(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore ); // In production, the Angular files will be served from this directory services.AddSpaStaticFiles(configuration => { configuration.RootPath = "ClientApp/dist"; }); services.AddTransient <IEmailSender, EmailSender>(); services.Configure <AuthMessageSenderOptions>(Configuration); services.AddTransient(typeof(IUserTwoFactorTokenProvider <AzureTableUser>), typeof(UserTwoFactorTokenProvider)); services.AddSingleton(typeof(TextResourceManager)); }