예제 #1
0
        public async Task <IActionResult> PostAsync([FromBody] AuthPost model)
        {
            var result = Unauthorized() as IActionResult;

            var user            = null as ApplicationUser;
            var isAuthenticated = false;

            switch (model.GrantType)
            {
            case GrantType.Password:
                ValidateModelForGrantTypePassword(model);

                user = await cachedUserManager.GetUserByUserNameAndFilterRoleAssignmentsByClientIdAsync(model.User, model.ClientId.Value);

                if (user != null)
                {
                    await ValidateUserStateAsync(user);

                    var checkPassword = await signInManager.CheckPasswordSignInAsync(user, model.Password);

                    if (checkPassword)
                    {
                        isAuthenticated = true;
                    }
                }

                break;

            case GrantType.RefreshToken:
                ValidateModelForGrantTypeRefreshToken(model);

                if (cacheHandler.TryGetValue <RefreshTokenData>(model.RefreshToken, out var refreshTokenData))
                {
                    await cacheHandler.RemoveAsync <RefreshTokenData>(model.RefreshToken);

                    user = await cachedUserManager.GetUserByUserNameAndFilterRoleAssignmentsByClientIdAsync(refreshTokenData.UserName, model.ClientId.Value);

                    isAuthenticated = true;
                }

                break;
            }

            if (isAuthenticated)
            {
                var authPostResult = new AuthPostResult(userPrincipalTokenizer.GenerateToken(user));
                await cacheHandler.SetAsync(authPostResult.RefreshToken, new RefreshTokenData()
                {
                    Token    = authPostResult.RefreshToken,
                    UserName = user.UserName
                });

                result = Ok(authPostResult);
            }

            return(result);
        }
예제 #2
0
        public async Task <OperationResult <JwtToken> > CreateToken(string email, string password)
        {
            User user = await userManager.FindByEmailAsync(email);

            if (user == null)
            {
                return(OperationResult <JwtToken> .Invalid("Login failed: invalid e-mail or password."));
            }

            OperationResult result = await signInManager.CheckPasswordSignInAsync(user, password, lockoutOnFailure : false);

            if (!result.IsValid)
            {
                return(result.Cast <JwtToken>());
            }

            var encodedToken = tokenService.BuildToken(user);

            return(OperationResult <JwtToken> .Valid(new JwtToken(encodedToken)));
        }
예제 #3
0
 public async Task <SignInResult> CheckPasswordSignInAsync(User user, string password)
 {
     return(await _signInManager.CheckPasswordSignInAsync(user, password));
 }