API接口 需要token验证 举例 c#
时间: 2024-10-16 07:10:46 浏览: 30
c#生成token验证4
API (Application Programming Interface)接口通常用于软件系统之间的通信,当接口需要token验证时,是为了保护数据安全,确保只有授权用户可以访问特定资源。在C#中,如果你有一个需要token验证的API接口,例如RESTful API,你可以按照以下步骤操作:
1. **创建Token服务**:首先,你可能会有一个服务或类负责生成、验证和管理token,如JWT(JSON Web Tokens)。
```csharp
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
public class TokenService
{
private readonly IConfiguration _config;
public TokenService(IConfiguration config)
{
_config = config;
}
// 发布JWT token
public string GenerateToken(User user)
{
var signingKey = new SymmetricSecurityKey(_config["Jwt:Secret"]);
var credentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
var jwt = new JwtSecurityToken(
issuer: "your_issuer",
audience: "your_audience",
claims: user.ToClaims(),
expires: DateTime.UtcNow.AddDays(7),
signingCredentials: credentials);
return new JwtSecurityTokenHandler().WriteToken(jwt);
}
// 验证token
public bool ValidateToken(string token)
{
try
{
var handler = new JwtSecurityTokenHandler();
var jwtToken = handler.ReadJwtToken(token);
// 根据业务需求检查jwtToken的有效性
return true; // 返回验证结果
}
catch (Exception)
{
return false;
}
}
}
```
2. **配置API控制器**:然后,在API控制器中,你需要启用JWT认证,并且在每个受保护的操作前检查token。
```csharp
[ApiController]
[Route("[controller]")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class YourController : ControllerBase
{
[HttpGet("protected")]
public IActionResult ProtectedMethod()
{
if (!User.IsAuthenticated)
{
return Unauthorized();
}
// 如果token验证通过,继续执行操作...
return Ok();
}
// 使用TokenService来获取并验证token
private readonly TokenService _tokenService;
public YourController(TokenService tokenService)
{
_tokenService = tokenService;
}
protected override Task AuthenticateAsync()
{
var token = HttpContext.Request.Headers.Authorization?.Value;
if (_tokenService.ValidateToken(token))
{
return base.AuthenticateAsync();
}
else
{
return Task.CompletedTask;
}
}
}
```
阅读全文