public IActionResult Token(LoginModel login) { _logger.LogInformation($"获取Token:User:{login.User}"); if (string.IsNullOrEmpty(login.User) || string.IsNullOrEmpty(login.Password))//判断账号密码是否正确 { return(BadRequest()); } var claim = new List <Claim> { new Claim(ClaimTypes.Name, login.User), new Claim(ClaimTypes.Role, "Test") }; //登录的账户缓存 if (DataCache.loginUserDict.ContainsKey(login.User)) { //这个时间可以调长点 if (DataCache.loginUserDict[login.User].Item3.AddSeconds(10) > DateTime.Now) { return(Ok(new { message = "已经有用户登录,请10S之后在登录,并且修改密码。" })); } DataCache.loginUserDict.Remove(login.User); } string tempToken = Guid.NewGuid().ToString(); string tempRefshToken = Guid.NewGuid().ToString(); DataCache.loginUserDict.Add(login.User, new Tuple <string, string, DateTime>(tempToken, tempRefshToken, DateTime.Now)); DataCache.AddRefreshToken(login.User, tempRefshToken); claim.Add(new Claim("token", tempToken)); //建立增加策略的授权 if (login.User == "Test") { claim.Add(new Claim("Test", "Test")); } if (login.User == "Test1") { claim.Add(new Claim("Test", "Test1")); } if (login.User == "Test2") { claim.Add(new Claim("Test", "Test2")); } if (login.User == "Test3") { claim.Add(new Claim("Test", "Test3")); } //对称秘钥 var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSettings.SecretKey)); //签名证书(秘钥,加密算法) var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); //生成token [注意]需要nuget添加Microsoft.AspNetCore.Authentication.JwtBearer包,并引用System.IdentityModel.Tokens.Jwt命名空间 var token = new JwtSecurityToken(_jwtSettings.Issuer, _jwtSettings.Audience, claim, DateTime.Now, DateTime.Now.AddMinutes(30), creds); return(Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token), refreshtoken = tempRefshToken }));//refreshtoken:jwt过期,刷新token }