Пример #1
0
        /// <summary>
        /// Signs in user
        /// </summary>
        /// <param name="userToLogin">Username and password of user</param>
        /// <returns>Generated token or errors that occured during sign in process</returns>
        public async Task <IServiceResult <string> > LoginAsync(UserToLoginDto userToLogin)
        {
            try
            {
                UserModel user = (await _unitOfWork.Users.GetByExpressionAsync(x => x.UserName.ToLower() == userToLogin.Username.ToLower())).SingleOrDefault();

                if (user != null)
                {
                    SignInResult loginResult = await _signInManager.CheckPasswordSignInAsync(user, userToLogin.Password, false);

                    if (loginResult.Succeeded)
                    {
                        IList <string> usersRoles = await _signInManager.UserManager.GetRolesAsync(user);

                        using (IJsonWebTokenProvider jwtProvider = new JsonWebTokenProvider(_configuration))
                        {
                            string token = jwtProvider.GenerateJwtBearer(user, usersRoles);

                            return(new ServiceResult <string>(ResultType.Correct, token));
                        }
                    }
                }

                return(new ServiceResult <string>(ResultType.Error, new List <string> {
                    "Incorrect username or password"
                }));
            }
            catch (Exception e)
            {
                return(new ServiceResult <string>(ResultType.Unauthorized, new List <string> {
                    e.Message
                }));
            }
        }
Пример #2
0
        private static int GenerateToken(DefaultOptions options, JsonWebTokenProvider provider)
        {
            // Validate
            if (!TimeParser.TimeParser.TryParseTimeString(options.ExpiryTime, out var expiry))
            {
                throw new UserErrorException($"Cannot parse time string: '{options.ExpiryTime}'");
            }

            var claims = options.Claims.Select(cStr =>
            {
                var parts = cStr.Split(':');
                if (parts.Length != 2)
                {
                    throw new UserErrorException($"Claim '{cStr}' is not in a valid format: 'claimName:claimValue'.");
                }

                return(claim: parts[0], value: parts[1]);
            }).ToArray();


            Console.WriteLine(provider.GetTokenFor(
                                  options.Subject,
                                  claims,
                                  expiry,
                                  options.Issuer,
                                  options.Audience
                                  ));

            if (!string.IsNullOrWhiteSpace(options.SaveAs))
            {
                SaveProfile(options);
            }

            return(0);
        }