Пример #1
0
        // Para obtener más información para configurar la autenticación, visite http://go.microsoft.com/fwlink/?LinkId=301864
        public void ConfigureAuth(IAppBuilder app)
        {
            // Configure el contexto de base de datos, el administrador de usuarios y el administrador de inicios de sesión para usar una única instancia por solicitud
            app.CreatePerOwinContext(() => BitSecurityContext.Create("SecurityConnection"));
            app.CreatePerOwinContext <BitUserManager>(BitUserManager.Create);
            app.CreatePerOwinContext <BitSignInManager>(BitSignInManager.Create);

            // Permitir que la aplicación use una cookie para almacenar información para el usuario que inicia sesión
            // y una cookie para almacenar temporalmente información sobre un usuario que inicia sesión con un proveedor de inicio de sesión de terceros
            // Configurar cookie de inicio de sesión
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath          = new PathString("/Account/Login"),
                CookieName         = "BitEngine-IdentityService",
                Provider           = new CookieAuthenticationProvider
                {
                    // Permite a la aplicación validar la marca de seguridad cuando el usuario inicia sesión.
                    // Es una característica de seguridad que se usa cuando se cambia una contraseña o se agrega un inicio de sesión externo a la cuenta.
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity <BitUserManager, BitUser, Guid>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager),
                        getUserIdCallback: (id) => (Guid.Parse(id.GetUserId())))
                }
            });
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            // Permite que la aplicación almacene temporalmente la información del usuario cuando se verifica el segundo factor en el proceso de autenticación de dos factores.
            app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));

            // Permite que la aplicación recuerde el segundo factor de verificación de inicio de sesión, como el teléfono o correo electrónico.
            // Cuando selecciona esta opción, el segundo paso de la verificación del proceso de inicio de sesión se recordará en el dispositivo desde el que ha iniciado sesión.
            // Es similar a la opción Recordarme al iniciar sesión.
            app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);

            // Quitar los comentarios de las siguientes líneas para habilitar el inicio de sesión con proveedores de inicio de sesión de terceros
            //app.UseMicrosoftAccountAuthentication(
            //    clientId: "",
            //    clientSecret: "");

            //app.UseTwitterAuthentication(
            //   consumerKey: "",
            //   consumerSecret: "");

            //app.UseFacebookAuthentication(
            //   appId: "",
            //   appSecret: "");

            //app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
            //{
            //    ClientId = "",
            //    ClientSecret = ""
            //});
        }
Пример #2
0
        public ServiceResult <Usuario> Create(CreateUsuarioDto createUsuario)
        {
            ServiceResult <Usuario> result;

            try
            {
                IdentityResult idenityResult = null;
                Usuario        usuario       = null;
                var            user          = new BitUser {
                    UserName = createUsuario.Email, Email = createUsuario.Email, EmailConfirmed = createUsuario.EmailConfirmed
                };
                //adding roles
                if (createUsuario.RolesIds.Length > 0)
                {
                    foreach (var roleId in createUsuario.RolesIds)
                    {
                        user.Roles.Add(new BitUserRole {
                            RoleId = roleId
                        });
                    }
                }
                var            securityContext = new BitSecurityContext();
                BitUserManager userManager     = new BitUserManager(new BitUserStore(securityContext));
                using (var scope = new TransactionScope(TransactionScopeOption.Required))
                {
                    idenityResult = userManager.Create(user, createUsuario.Password);
                    if (idenityResult.Succeeded)
                    {
                        usuario = new Usuario {
                            Id = user.Id, Email = user.Email
                        };
                        _usuarioRepository.Insert(usuario);
                        _context.SaveChanges();
                    }
                    else
                    {
                        result = new ServiceErrorResult <Usuario>(new OperationError(ErrorType.Validation, string.Join(",", idenityResult.Errors)));
                    }
                    scope.Complete();
                }

                result = new ServiceSucceedResult <Usuario>(usuario);
            }
            catch (Exception ex)
            {
                OperationError error = new OperationError(ErrorType.Exception, "No se realizó la inserción", ex);
                result = new ServiceErrorResult <Usuario>(ErrorType.Exception, "No se insertó", ex);
            }
            return(result);
        }
Пример #3
0
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            var user = (ClaimsIdentity)HttpContext.Current.User.Identity;

            if (!user.IsAuthenticated)
            {
                return(false);
            }
            var userId = user.Claims.SingleOrDefault(x => x.Type == ClaimTypes.NameIdentifier).Value;
            BitSecurityContext securityContext = httpContext.GetOwinContext().Get <BitSecurityContext>();
            var id         = Guid.Parse(userId);
            var repository = new PermissionRepository(securityContext);
            var valid      = repository.HasPermission(id, PermissionKey);

            return(valid);
        }
Пример #4
0
        /// <summary>
        /// Devuelve las opciones de menú que corresponden al usuario según sus permisos
        /// </summary>
        /// <param name="context">Contexto de OWIN</param>
        /// <returns>Colección de permisos</returns>
        public static ICollection <BitMenuItem> GetUserMenu(this IOwinContext context)
        {
            var user = (ClaimsIdentity)HttpContext.Current.User.Identity;

            if (!user.IsAuthenticated)
            {
                return(new List <BitMenuItem>());
            }

            var userId = user.Claims.SingleOrDefault(x => x.Type == ClaimTypes.NameIdentifier).Value;
            BitSecurityContext securityContext = context.Get <BitSecurityContext>();
            var id         = Guid.Parse(userId);
            var repository = new MenuItemRepository(securityContext);

            return(repository.GetMenuByUsuarioId(id));
        }
Пример #5
0
 public PermissionRepository(BitSecurityContext context)
 {
     _context = context;
 }
Пример #6
0
 public MenuItemRepository(BitSecurityContext context)
 {
     _context = context;
 }
Пример #7
0
 public RoleRepository(BitSecurityContext context)
 {
     _context = context;
 }