コード例 #1
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="userManager"></param>
 /// <param name="authenticationManager"></param>
 public InspurSignInManager(InspurUserManager <TUser, TKey> userManager, IAuthenticationManager authenticationManager)
 {
     if (userManager == null)
     {
         throw new ArgumentNullException("userManager");
     }
     if (authenticationManager == null)
     {
         throw new ArgumentNullException("authenticationManager");
     }
     InspurUserManager     = userManager;
     AuthenticationManager = authenticationManager;
 }
コード例 #2
0
        /// <summary>
        /// Sign the user in using an associated external login
        /// </summary>
        /// <param name="loginInfo"></param>
        /// <param name="isPersistent"></param>
        /// <returns></returns>
        public async Task <InspurSignInStatus> ExternalSignInAsync(InspurExternalLoginInfo loginInfo, bool isPersistent)
        {
            var user = await InspurUserManager.FindAsync(loginInfo.Login).WithCurrentCulture();

            if (user == null)
            {
                return(InspurSignInStatus.Failure);
            }
            //if (await InspurUserManager.IsLockedOutAsync(user.Id).WithCurrentCulture())
            //{
            //    return InspurSignInStatus.LockedOut;
            //}
            return(await SignInOrTwoFactor(user, isPersistent).WithCurrentCulture());
        }
        /// <summary>
        ///     Validate the token for the user
        /// </summary>
        /// <param name="purpose"></param>
        /// <param name="token"></param>
        /// <param name="manager"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public virtual async Task <bool> ValidateAsync(string purpose, string token, InspurUserManager <TUser, TKey> manager,
                                                       TUser user)
        {
            int code;

            if (!Int32.TryParse(token, out code))
            {
                return(false);
            }
            var securityToken = await manager.CreateSecurityTokenAsync(user.Id).WithCurrentCulture();

            var modifier = await GetUserModifierAsync(purpose, manager, user).WithCurrentCulture();

            return(securityToken != null && Rfc6238AuthenticationService.ValidateCode(securityToken, code, modifier));
        }
コード例 #4
0
        /// <summary>
        /// Send a two factor code to a user
        /// </summary>
        /// <param name="provider"></param>
        /// <returns></returns>
        public virtual async Task <bool> SendTwoFactorCodeAsync(string provider)
        {
            var userId = await GetVerifiedUserIdAsync().WithCurrentCulture();

            if (userId == null)
            {
                return(false);
            }

            var token = await InspurUserManager.GenerateTwoFactorTokenAsync(userId, provider).WithCurrentCulture();

            // See IdentityConfig.cs to plug in Email/SMS services to actually send the code
            await InspurUserManager.NotifyTwoFactorTokenAsync(userId, provider, token).WithCurrentCulture();

            return(true);
        }
コード例 #5
0
        private async Task <InspurSignInStatus> SignInOrTwoFactor(TUser user, bool isPersistent)
        {
            var id = Convert.ToString(user.Id);

            if (await InspurUserManager.GetTwoFactorEnabledAsync(user.Id).WithCurrentCulture() &&
                (await InspurUserManager.GetValidTwoFactorProvidersAsync(user.Id).WithCurrentCulture()).Count > 0 &&
                !await AuthenticationManager.TwoFactorBrowserRememberedAsync(id).WithCurrentCulture())
            {
                var identity = new ClaimsIdentity(DefaultAuthenticationTypes.TwoFactorCookie);
                identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, id));
                AuthenticationManager.SignIn(identity);
                return(InspurSignInStatus.RequiresVerification);
            }
            await SignInAsync(user, isPersistent, false).WithCurrentCulture();

            return(InspurSignInStatus.Success);
        }
コード例 #6
0
        /// <summary>
        /// Sign in the user in using the user name and password
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="password"></param>
        /// <param name="isPersistent"></param>
        /// <param name="shouldLockout"></param>
        /// <returns></returns>
        public virtual async Task <InspurSignInStatus> PasswordSignInAsync(string email, string password, bool isPersistent, bool shouldLockout)
        {
            if (InspurUserManager == null)
            {
                return(InspurSignInStatus.Failure);
            }
            //var user = await InspurUserManager.FindByNameAsync(userName).WithCurrentCulture();
            //if (user == null)
            //{
            //}

            var user = await InspurUserManager.FindByEmailAsync(email).WithCurrentCulture();

            if (user == null)
            {
                return(InspurSignInStatus.Failure);
            }

            //if (await InspurUserManager.IsLockedOutAsync(user.Id).WithCurrentCulture())
            //{
            //    return InspurSignInStatus.LockedOut;
            //}
            if (await InspurUserManager.CheckPasswordAsync(user, password).WithCurrentCulture())
            {
                //await InspurUserManager.ResetAccessFailedCountAsync(user.Id).WithCurrentCulture();
                return(await SignInOrTwoFactor(user, isPersistent).WithCurrentCulture());
            }
            if (shouldLockout)
            {
                // If lockout is requested, increment access failed count which might lock out the user
                await InspurUserManager.AccessFailedAsync(user.Id).WithCurrentCulture();

                //if (await InspurUserManager.IsLockedOutAsync(user.Id).WithCurrentCulture())
                //{
                //    return InspurSignInStatus.LockedOut;
                //}
            }
            return(InspurSignInStatus.Failure);
        }
コード例 #7
0
 /// <summary>
 /// Called to generate the ClaimsIdentity for the user, override to add additional claims before SignIn
 /// </summary>
 /// <param name="user"></param>
 /// <returns></returns>
 public virtual Task <ClaimsIdentity> CreateUserIdentityAsync(TUser user)
 {
     return(InspurUserManager.CreateIdentityAsync(user, AuthenticationType));
 }
 /// <summary>
 ///     Used for entropy in the token, uses the user.Id by default
 /// </summary>
 /// <param name="purpose"></param>
 /// <param name="manager"></param>
 /// <param name="user"></param>
 /// <returns></returns>
 public virtual Task <string> GetUserModifierAsync(string purpose, InspurUserManager <TUser, TKey> manager, TUser user)
 {
     return(Task.FromResult("Totp:" + purpose + ":" + user.Id));
 }
 /// <summary>
 ///     This token provider does not notify the user by default
 /// </summary>
 /// <param name="token"></param>
 /// <param name="manager"></param>
 /// <param name="user"></param>
 /// <returns></returns>
 public virtual Task NotifyAsync(string token, InspurUserManager <TUser, TKey> manager, TUser user)
 {
     return(Task.FromResult(0));
 }
コード例 #10
0
 /// <summary>
 ///     Constructor
 /// </summary>
 /// <param name="manager"></param>
 public InspurUserValidator(InspurUserManager <TUser, string> manager)
     : base(manager)
 {
 }