コード例 #1
0
        /// <summary>
        /// 根据用户信息和密匙生成token
        /// </summary>
        /// <param name="userInfo"></param>
        /// <param name="symmetricKey"></param>
        /// <returns></returns>
        public string CreateToken(UserClaimInfo userInfo, string symmetricKey)
        {
            var tokenHandler = new JwtSecurityTokenHandler();

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(_claimManager.CreateClaims(userInfo)),
                Expires            = DateTime.UtcNow.AddDays(7),
                SigningCredentials =
                    new SigningCredentials(
                        new SymmetricSecurityKey(Encoding.ASCII.GetBytes(symmetricKey)),
                        SecurityAlgorithms.HmacSha256Signature
                        )
            };

            var token = tokenHandler.CreateToken(tokenDescriptor);

            return(tokenHandler.WriteToken(token));
        }
コード例 #2
0
        public List <Claim> CreateClaims(UserClaimInfo userInfo)
        {
            List <Claim> claims = new List <Claim>()
            {
                new Claim(JwtClaimType.Subject, userInfo.Subject),
                new Claim(JwtClaimType.Audience, JwtAuthenConfiguration.Audience),
                new Claim(JwtClaimType.Issuer, JwtAuthenConfiguration.Issuer),
                new Claim(JwtClaimType.NameIdentifier, userInfo.Subject),
                new Claim(JwtClaimType.UserName, userInfo.UserName),
                new Claim(JwtClaimType.Name, userInfo.Name ?? ""),
                new Claim(JwtClaimType.EmailAddress, userInfo.EmailAddress ?? ""),
                new Claim(JwtClaimType.Phone, userInfo.Phone ?? ""),
            };

            foreach (var e in userInfo.Permissions)
            {
                claims.Add(new Claim(JwtClaimType.Permission, e));
            }

            return(claims);
        }
コード例 #3
0
        public async Task <ActionResult <object> > LoginAsync([FromBody] LoginApiModel model)
        {
            LoginInput input = new LoginInput()
            {
                Username = model.AccountID,
                Password = model.Password,
                TenantId = _AbpSession.TenantId,
            };
            var output = await _AccountAppService.Login(input);

            if (output.AbpLoginResult.Result == AbpLoginResultType.InvalidUserNameOrEmailAddress)
            {
                throw new UserFriendlyException("用户名或密码错误");
            }

            if (output.AbpLoginResult.Result == AbpLoginResultType.InvalidPassword)
            {
                throw new UserFriendlyException("密码错误");
            }

            IdentityUser user = output.AbpLoginResult.User;

            UserClaimInfo userClaimInfo = new UserClaimInfo(user.Id.ToString(), user.Permissions)
            {
                Name     = user.Name,
                UserName = user.UserName
            };

            string jwtToken = _JwtTokenHandler.CreateToken(userClaimInfo, WebConfiguration.SymmetricKey);

            return(new
            {
                access_token = jwtToken,
                token_type = "Bearer"
            });
        }