예제 #1
0
        public AccountController(
            IAzureTableRepo azureTableRepo
            , Nivra.AzureOperations.Utility authUtility
            , Nivra.AzureOperations.Utility userTokenUtility
            , AzureTableUserManager userManager)
        {
            if (azureTableRepo == null)
            {
                throw new ArgumentNullException(nameof(azureTableRepo));
            }
            if (authUtility == null)
            {
                throw new ArgumentNullException(nameof(authUtility));
            }

            this.azureTableRepo   = azureTableRepo;
            this.authUtility      = authUtility;
            this.userTokenUtility = userTokenUtility;
            this._userManager     = userManager;
            var userTwoFactorTokenProvider = new UserTwoFactorTokenProvider(this._userManager, userTokenUtility);

            this._userManager.RegisterTokenProvider("Default", userTwoFactorTokenProvider);
            this._userManager.RegisterTokenProvider("Authenticator", userTwoFactorTokenProvider);
            authCloudTable = this.azureTableRepo.Collection["Auth"];
        }
예제 #2
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));
        }
 public AzureTableUserStore(CloudTable authCloudTable, Nivra.AzureOperations.Utility userTokenUtility)
 {
     this.AuthCloudTable   = authCloudTable;
     this.UserTokenUtility = userTokenUtility;
 }