예제 #1
0
        public IActionResult RefreshToken(string refreshToken)
        {
            return(Token(new LoginDto()
            {
                Password = "******", UserName = "******"
            }));

            UserService service = new UserService();

            SecurityToken validatedToken;
            var           claimsPrincipal = JwtTokenUtil.Decode(refreshToken, _jwtSettings, out validatedToken);

            //判断使用的是不是refreshtoken
            if (claimsPrincipal != null && claimsPrincipal.HasClaim(a => a.Type == "tokenType"))
            {
                //根据claim中的id再次从数据库找到user 使用最新的user信息重新签发token
                var userId = claimsPrincipal.Claims.First(a => a.Type == ClaimTypes.Sid).Value;
                var user   = service.GetUser(Convert.ToInt64(userId));

                //重新签发token和refreshtoken
                List <Claim> claims = new ClaimUser(user).GetClaims();
                //签发token
                var token = JwtTokenUtil.Encode(claims, _jwtSettings);

                //签发refreshtoken
                claims.Add(new Claim("tokenType", "refresh"));
                var refreshtoken = JwtTokenUtil.Encode(claims, _jwtSettings);

                return(Ok(new { token, refreshtoken }));
            }
            //如果refreshtoken 失效了 说明该用户已经一个月没有和你的应用交互了 所以设置为未授权让其重新登录
            return(Unauthorized());
        }
예제 #2
0
        public async Task <IActionResult> PutClaimUser(Guid id, ClaimUser claimUser)
        {
            if (id != claimUser.ClaimId)
            {
                return(BadRequest());
            }

            _context.Entry(claimUser).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ClaimUserExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
예제 #3
0
        //[CaptchaValidate]
        public IActionResult Token(LoginDto dto)
        {
            try
            {
                //return Ok(new { status = 0});
                //UserService service = new UserService();
                ClaimUser claimUser = null;
                if (dto.UserName == "admin" && dto.Password == "123")
                {
                    claimUser = new ClaimUser(new User()
                    {
                        UserId   = 1,
                        UserName = "******",
                        Password = "******",
                        NickName = "songlin"
                    });
                }
                //var claimUser = service.Login(dto.UserName, dto.Password);
                if (claimUser == null)
                {
                    //string clientId = HttpContext.Request.Cookies["clientId"];
                    //string code = ValidateCode.GetCode(clientId);
                    return(Ok(new
                    {
                        code = 1,
                        msg = "用户名或者密码错误"
                    }));
                }
                List <Claim> claims = claimUser.GetClaims();
                //签发token
                var token = JwtTokenUtil.Encode(claims, _jwtSettings);

                //签发refreshtoken
                claims.Add(new Claim("tokenType", "refresh"));
                var refreshToken = JwtTokenUtil.Encode(claims, _jwtSettings);

                return(Ok(new { code = 0, data = new { token, refreshToken, _jwtSettings.Expires, type = "Bear" } }));
            }
            catch (Exception ex)
            {
                Common.LogHelper.Error("Error", ex);
                return(Ok(new
                {
                    code = 1,
                    msg = ex.Message
                }));
            }
        }
예제 #4
0
        public async Task <ActionResult <ClaimUser> > PostClaimUser(ClaimUser claimUser)
        {
            _context.ClaimUser.Add(claimUser);
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (ClaimUserExists(claimUser.ClaimId))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            return(CreatedAtAction("GetClaimUser", new { id = claimUser.ClaimId }, claimUser));
        }