Esempio n. 1
0
        public Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
        {
            AppDbContext _appContext = new AppDbContext();

            // cannot use _appContext;
            SysAppusers user = _appContext.SysAppusers.Where(user => user.Username == context.UserName && user.Password == context.Password).FirstOrDefault();

            // var user = new SysAppusers
            // {
            //     Userid = "abcc",
            //     Username = "******",
            //     Passwd = "password",
            //     Email = "*****@*****.**"
            // };


            // Console.WriteLine(context.ToString());

            if (user == null)
            {
                GrantValidationResult result = new GrantValidationResult();
                result.Error            = "invalid_user";
                result.ErrorDescription = "Username or password invalid";
                result.IsError          = true;

                context.Result = result;
                return(Task.FromResult(0));
            }

            context.Result = new GrantValidationResult(user.Userid.ToString(), "password", new List <Claim> {
                new Claim("username", user.Username),
                new Claim("email", user.Email),
                // new Claim("roles",),
                new Claim("roles", "user"),
            });
            return(Task.FromResult(0));
        }
Esempio n. 2
0
        private async Task <SysAppusers> AutoProvisionUserAsync(string provider, string providerUserId, IEnumerable <Claim> claims)
        {
            // create a list of claims that we want to transfer into our store
            var filtered = new List <Claim>();

            // user's display name
            var name = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Name)?.Value ??
                       claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value;

            if (name != null)
            {
                filtered.Add(new Claim(JwtClaimTypes.Name, name));
            }
            else
            {
                var first = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.GivenName)?.Value ??
                            claims.FirstOrDefault(x => x.Type == ClaimTypes.GivenName)?.Value;
                var last = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.FamilyName)?.Value ??
                           claims.FirstOrDefault(x => x.Type == ClaimTypes.Surname)?.Value;
                if (first != null && last != null)
                {
                    filtered.Add(new Claim(JwtClaimTypes.Name, first + " " + last));
                }
                else if (first != null)
                {
                    filtered.Add(new Claim(JwtClaimTypes.Name, first));
                }
                else if (last != null)
                {
                    filtered.Add(new Claim(JwtClaimTypes.Name, last));
                }
            }

            // email
            var email = claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Email)?.Value ??
                        claims.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value;

            if (email != null)
            {
                filtered.Add(new Claim(JwtClaimTypes.Email, email));
            }

            var user = new SysAppusers
            {
                Username = Guid.NewGuid().ToString(),
            };
            var identityResult = await _userManager.CreateAsync(user);

            if (!identityResult.Succeeded)
            {
                throw new Exception(identityResult.Errors.First().Description);
            }

            if (filtered.Any())
            {
                identityResult = await _userManager.AddClaimsAsync(user, filtered);

                if (!identityResult.Succeeded)
                {
                    throw new Exception(identityResult.Errors.First().Description);
                }
            }

            identityResult = await _userManager.AddLoginAsync(user, new UserLoginInfo(provider, providerUserId, provider));

            if (!identityResult.Succeeded)
            {
                throw new Exception(identityResult.Errors.First().Description);
            }

            return(user);
        }