账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    用c# webAPI 实现了一个token 服务端应该怎么处理toeken
    96
    0
    //登录public LoginResponse Login(string userName, string userPassword) { using (WebSiteDbContext dbContext = new WebSiteDbContext()) { LoginResponse result = new LoginResponse(); User user = dbContext.Users.FirstOrDefault(c => c.Name == userName); if (user == null) { result.Successful = false; result.Message = "用户不存在"; result.Token = null; return result; } if (user.Password == userPassword) { result.Successful = false; result.Message = "密码错误"; result.Token = null; return result; } string accessToken = GenerateToken(user); result.Successful = true; result.Message = "登录成功"; result.Token = GenerateToken(user); return result; } }生成token private string GenerateToken(User user) { string result; JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler(); SecurityTokenDescriptor tokenDescriptor = new SecurityTokenDescriptor(); tokenDescriptor.Expires = DateTime.UtcNow.AddDays(7); tokenDescriptor.Subject = new ClaimsIdentity(new[] { new Claim("userName", user.Name), new Claim("userId",user.Id.ToString()) }); var token = tokenHandler.CreateToken(tokenDescriptor); result = tokenHandler.WriteToken(token); return result; }当前端携带token而来 需要被验证的接口应该如何处理。例如 [HttpPost] public SimpleResponse AddNews(News newsWebsite) { SimpleResponse result = new SimpleResponse(); using (WebSiteDbContext dbContext = new WebSiteDbContext()) { dbContext.News.Add(newsWebsite); dbContext.SaveChanges(); result.Successful = true; result.Message = "已添加"; return result; } }
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 悲欢独自饮 普通会员 2楼

      在C# WebAPI中,如果你想要实现一个token服务端,你需要处理各种可能的情况,包括用户输入的错误、验证令牌的合法性、以及处理令牌过期等。以下是一个简单的示例,展示了如何处理这些情况:

      首先,你需要创建一个token类来存储令牌信息。这个类可以包含令牌的生成时间、有效时间、过期时间等信息。

      csharp public class Token { public DateTime CreatedAt { get; set; } public DateTime ExpiresAt { get; set; } public DateTime ExpiredAt { get; set; } }

      然后,你需要在你的WebAPI中处理用户请求,验证令牌的合法性,以及处理令牌过期等。

      ```csharp public class TokenService : ControllerBase { private readonly HttpClient _httpClient; private readonly Token _token;

      public TokenService(HttpClient httpClient)
      {
          _httpClient = httpClient;
          _token = new Token();
      }
      
      [HttpGet]
      public async Task<IActionResult> GetToken()
      {
          var token = await _httpClient.GetStringAsync("/api/token");
      
          if (string.IsNullOrEmpty(token))
          {
              return BadRequest("Invalid token");
          }
      
          return Ok(new Token
          {
              CreatedAt = DateTime.UtcNow,
              ExpiresAt = DateTime.UtcNow.AddMinutes(30),
              ExpiredAt = DateTime.UtcNow.AddHours(1)
          });
      }
      
      [HttpGet("{id}")]
      public async Task<IActionResult> GetToken(int id)
      {
          var token = await _httpClient.GetStringAsync($"/api/token/{id}");
      
          if (string.IsNullOrEmpty(token))
          {
              return BadRequest("Invalid token");
          }
      
          return Ok(new Token
          {
              CreatedAt = DateTime.UtcNow,
              ExpiresAt = DateTime.UtcNow.AddMinutes(30),
              ExpiredAt = DateTime.UtcNow.AddHours(1)
          });
      }
      
      [HttpGet("{id}/refresh")]
      public async Task<IActionResult> RefreshToken(int id)
      {
          var token = await _httpClient.GetStringAsync($"/api/token/{id}/refresh");
      
          if (string.IsNullOrEmpty(token))
          {
              return BadRequest("Invalid token");
          }
      
          return Ok(new Token
          {
              CreatedAt = DateTime.UtcNow,
              ExpiresAt = DateTime.UtcNow.AddMinutes(30),
              ExpiredAt = DateTime.UtcNow.AddHours(1)
          });
      }
      
      [HttpGet("{id}/delete")]
      public async Task<IActionResult> DeleteToken(int id)
      {
          var token = await _httpClient.GetStringAsync($"/api/token/{id}");
      
          if (string.IsNullOrEmpty(token))
          {
              return BadRequest("Invalid token");
          }
      
          await _ httpClient.DeleteAsync($"/api/token/{id}");
      
          return Ok("Token deleted");
      }
      

      } ```

      在这个示例中,我们使用了HttpClient来发送HTTP请求,并使用了Json.NET库来解析响应。我们还定义了一些处理各种情况的方法,如验证令牌的合法性、处理令牌过期等。

      请注意,这只是一个简单的示例,实际的实现可能需要处理更多的错误和异常,以及使用更复杂的错误处理机制。

    • 霹雳猫 普通会员 3楼

      在C# WebAPI中,如果你想要实现一个token服务端,你需要处理各种可能的情况,包括用户输入的错误、验证令牌的合法性、以及处理令牌过期等。以下是一个简单的示例,展示了如何处理这些情况:

      首先,你需要创建一个token类来存储令牌信息。这个类可以包含令牌的生成时间、有效时间、过期时间等信息。

      csharp public class Token { public DateTime CreatedAt { get; set; } public DateTime ExpiresAt { get; set; } public DateTime ExpiredAt { get; set; } }

      然后,你需要在你的WebAPI中处理用户请求,验证令牌的合法性,以及处理令牌过期等。

      ```csharp public class TokenService : ControllerBase { private readonly HttpClient _httpClient; private readonly Token _token;

      public TokenService(HttpClient httpClient)
      {
          _httpClient = httpClient;
          _token = new Token();
      }
      
      [HttpGet]
      public async Task<IActionResult> GetToken()
      {
          var token = await _httpClient.GetStringAsync("/api/token");
      
          if (string.IsNullOrEmpty(token))
          {
              return BadRequest("Invalid token");
          }
      
          return Ok(new Token
          {
              CreatedAt = DateTime.UtcNow,
              ExpiresAt = DateTime.UtcNow.AddMinutes(30),
              ExpiredAt = DateTime.UtcNow.AddHours(1)
          });
      }
      
      [HttpGet("{id}")]
      public async Task<IActionResult> GetToken(int id)
      {
          var token = await _httpClient.GetStringAsync($"/api/token/{id}");
      
          if (string.IsNullOrEmpty(token))
          {
              return BadRequest("Invalid token");
          }
      
          return Ok(new Token
          {
              CreatedAt = DateTime.UtcNow,
              ExpiresAt = DateTime.UtcNow.AddMinutes(30),
              ExpiredAt = DateTime.UtcNow.AddHours(1)
          });
      }
      
      [HttpGet("{id}/refresh")]
      public async Task<IActionResult> RefreshToken(int id)
      {
          var token = await _httpClient.GetStringAsync($"/api/token/{id}/refresh");
      
          if (string.IsNullOrEmpty(token))
          {
              return BadRequest("Invalid token");
          }
      
          return Ok(new Token
          {
              CreatedAt = DateTime.UtcNow,
              ExpiresAt = DateTime.UtcNow.AddMinutes(30),
              ExpiredAt = DateTime.UtcNow.AddHours(1)
          });
      }
      
      [HttpGet("{id}/delete")]
      public async Task<IActionResult> DeleteToken(int id)
      {
          var token = await _httpClient.GetStringAsync($"/api/token/{id}");
      
          if (string.IsNullOrEmpty(token))
          {
              return BadRequest("Invalid token");
          }
      
          await _ httpClient.DeleteAsync($"/api/token/{id}");
      
          return Ok("Token deleted");
      }
      

      } ```

      在这个示例中,我们使用了HttpClient来发送HTTP请求,并使用了Json.NET库来解析响应。我们还定义了一些处理各种情况的方法,如验证令牌的合法性、处理令牌过期等。

      请注意,这只是一个简单的示例,实际的实现可能需要处理更多的错误和异常,以及使用更复杂的错误处理机制。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部