Пример #1
0
        public async Task <MessageModel <JwtTokenOutDto> > JwtToken(JwtTokenInDto dto)
        {
            string jwt = string.Empty;

            dto.Pass = MD5Helper.MD5Encrypt32(dto.Pass);

            var user = (await _userAppService.Queryable(x => x.LoginName == dto.Name && x.LoginPwd == dto.Pass)).ToList();

            if (user.Count > 0)
            {
                //基于角色授权
                var userRoles = await _userAppService.GetUserRoleNameStr(dto.Name, dto.Pass);

                //如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色
                var claims = new List <Claim> {
                    new Claim(ClaimTypes.Name, dto.Name),
                    new Claim(JwtRegisteredClaimNames.Jti, user.FirstOrDefault().Id),
                    new Claim(ClaimTypes.Expiration, DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString())
                };
                claims.AddRange(userRoles.Split(',').Select(s => new Claim(ClaimTypes.Role, s)));
                if (!Permissions.IsUseIds4)
                {
                    var data = await _role2Module2PermissionAppService.RoleModuleMaps();

                    //角色,权限 关系列表
                    var list = (from item in data
                                select new PermissionItem
                    {
                        Url = item.ModuleEntity?.LinkUrl,
                        Role = item.RoleEntity?.Name,
                    }).ToList();

                    _requirement.Permissions = list;
                }

                var token = JwtTokenHelper.BuildJwtToken(claims.ToArray(), _requirement);
                return(new MessageModel <JwtTokenOutDto>()
                {
                    success = true,
                    msg = "获取成功",
                    response = token
                });
            }
            else
            {
                return(await Task.FromResult(new MessageModel <JwtTokenOutDto>()
                {
                    success = false,
                    msg = "认证失败",
                }));
            }
        }
Пример #2
0
        public async Task <MessageModel <JwtTokenOutDto> > RefreshToken(string token = "")
        {
            string jwtStr = string.Empty;

            if (string.IsNullOrEmpty(token))
            {
                return(new MessageModel <JwtTokenOutDto>()
                {
                    success = false,
                    msg = "token无效,请重新登录!",
                });
            }
            var tokenModel = JwtHelper.SerializeJwt(token);

            if (tokenModel != null && tokenModel.Uid != "")
            {
                var user = (await _userAppService.Queryable(x => x.Id == tokenModel.Uid)).FirstOrDefault();
                if (user != null)
                {
                    var userRoles = await _userAppService.GetUserRoleNameStr(user.LoginName, user.LoginPwd);

                    //如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色
                    var claims = new List <Claim> {
                        new Claim(ClaimTypes.Name, user.LoginName),
                        new Claim(JwtRegisteredClaimNames.Jti, tokenModel.Uid),
                        new Claim(ClaimTypes.Expiration, DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString())
                    };
                    claims.AddRange(userRoles.Split(',').Select(s => new Claim(ClaimTypes.Role, s)));

                    //用户标识
                    var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
                    identity.AddClaims(claims);

                    var refreshToken = JwtTokenHelper.BuildJwtToken(claims.ToArray(), _requirement);
                    return(new MessageModel <JwtTokenOutDto>()
                    {
                        success = true,
                        msg = "获取成功",
                        response = refreshToken
                    });
                }
            }

            return(new MessageModel <JwtTokenOutDto>()
            {
                success = false,
                msg = "认证失败!",
            });
        }
Пример #3
0
        public async Task <IActionResult> GetJwtToken(string name, string pwd)
        {
            if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pwd))
            {
                return(Ok(new
                {
                    success = false,
                    msg = "用户名或密码不能为空",
                }));
            }

            pwd = Encryption.MD5(pwd);
            var getuserInfo = await userService.QueryUserInfoAsync(name, pwd);

            if (getuserInfo != null && getuserInfo.Userid > 0)
            {
                //模拟用户角色,实际逻辑应该从数据库查询
                var userRoles = new List <string> {
                    "Admin", "User"
                };

                var claims = new List <Claim>()
                {
                    new Claim("Name", getuserInfo.Username),         //用户名
                    new Claim("Uid", getuserInfo.Userid.ToString()), //用户Id
                    new Claim(ClaimTypes.Expiration, DateTime.Now.AddSeconds(requirement.Expiration.TotalSeconds).ToString())
                    //其他信息
                };
                claims.AddRange(userRoles.Select(o => new Claim("Roles", o)));  //加入角色

                var tokenStr = JwtTokenHelper.BuildJwtToken(claims.ToArray(), requirement);
                return(Ok(new
                {
                    success = true,
                    token = tokenStr,
                    msg = "获取成功"
                }));
            }
            else
            {
                return(Ok(new
                {
                    success = false,
                    msg = "获取失败"
                }));
            }
        }