.net JWT示例
时间: 2023-06-28 15:15:16 浏览: 110
JWT实例demo
3星 · 编辑精心推荐
下面是一个 .NET Core 中使用 JWT 的示例:
```csharp
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
namespace ExampleApp.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
private readonly IConfiguration _config;
public AuthController(IConfiguration config)
{
_config = config;
}
[AllowAnonymous]
[HttpPost("login")]
public IActionResult Login([FromBody] UserCredentials credentials)
{
// Check if the user credentials are valid here
var claims = new[]
{
new Claim(ClaimTypes.NameIdentifier, "12345"),
new Claim(ClaimTypes.Name, "John Doe")
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: _config["Jwt:Issuer"],
audience: _config["Jwt:Audience"],
claims: claims,
expires: DateTime.UtcNow.AddDays(7),
signingCredentials: creds
);
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token)
});
}
[Authorize]
[HttpGet("protected")]
public IActionResult Protected()
{
return Ok("This is a protected resource");
}
}
}
public class UserCredentials
{
public string Username { get; set; }
public string Password { get; set; }
}
```
在上面的示例中,我们创建了一个名为 AuthController 的控制器,其中包含两个操作:Login 和 Protected。首先,我们使用 Login 操作来生成 JWT。生成 JWT 的过程中,我们使用了 appsettings.json 文件中的配置信息(Jwt:Key、Jwt:Issuer 和 Jwt:Audience)。
在 Login 操作中,我们首先验证了用户凭据。如果凭据有效,我们使用 SymmetricSecurityKey 和 SigningCredentials 对象来创建 JWT 的密钥和签名凭据。接下来,我们使用 JwtSecurityToken 对象来构建 JWT 的声明(claims),并指定了 JWT 的发行者、受众、过期时间和签名凭据。最后,我们使用 JwtSecurityTokenHandler 的 WriteToken 方法将 JWT 转换为字符串并返回。
在 Protected 操作中,我们使用 [Authorize] 特性来保护操作,只有在 JWT 有效时才能访问此操作。
阅读全文