Exemplo n.º 1
0
        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"];
        }
Exemplo n.º 2
0
 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;
        }
Exemplo n.º 4
0
        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));
            
        }
    }
Exemplo n.º 5
0
        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());
            });
        }
Exemplo n.º 6
0
        // 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));
        }