API身份认证还得看我JWT

JWT是一种开放标准,用于在网络应用间安全传输信息。它由头部、载荷和签名三部分组成,常用于身份认证。在ASP.NETCore中,可以通过Microsoft.AspNetCore.Authentication.JwtBearer包实现JWT身份认证,包括配置服务、中间件和控制器的授权标记。
摘要由CSDN通过智能技术生成

JWT(JSON Web Token)是一种用于身份认证的开放标准(RFC 7519),它可以在网络应用间传输信息作为 JSON 对象。JWT 由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

头部(Header):头部通常由两部分组成,令牌的类型(即 JWT)和所使用的签名算法,例如:

{
  "alg": "HS256",
  "typ": "JWT"
}

载荷(Payload):载荷包含要传输的信息,可以包括用户的身份信息、权限等。载荷可以自定义,但建议避免包含敏感信息。例如:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

签名(Signature):签名用于验证令牌的完整性和真实性,通常通过使用头部和载荷中的数据以及一个密钥进行加密生成。例如:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

JWT 的工作流程如下:

用户提供用户名和密码进行身份认证。

服务器验证用户名和密码的正确性。

服务器使用私钥签发 JWT,并将其发送给客户端。

客户端将 JWT 存储在本地,例如在浏览器的 localStorage 中。

客户端在后续的请求中使用 JWT 进行身份认证,将其放在请求的头部或其他位置。

服务器接收到请求后,使用公钥验证 JWT 的合法性和完整性。

如果 JWT 通过验证,服务器可以根据载荷中的信息进行授权和权限验证。JWT 的优点包括不需要在服务器端存储会话信息、可扩展性好、跨语言和跨平台支持等。但需要注意的是,由于 JWT 是基于对称或非对称加密的,因此需要妥善保管密钥,以防止令牌被篡改。

在 ASP.NET Core 中,可以使用 Microsoft.AspNetCore.Authentication.JwtBearer 包来实现 JWT 的身份认证。下面是一些基本的步骤:

安装包:在项目中安装 Microsoft.AspNetCore.Authentication.JwtBearer 包。

配置身份认证服务:在 Startup.cs 文件的 ConfigureServices 方法中添加以下代码,以配置 JWT 身份认证服务。

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
// ...
public void ConfigureServices(IServiceCollection services)
{
    // ...
    // 添加身份认证服务
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = "your_issuer",
                ValidAudience = "your_audience",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))
            };
        });
    // ...
}

配置身份认证中间件:在 Startup.cs 文件的 Configure 方法中添加以下代码,以配置身份认证中间件。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...
    app.UseAuthentication();
    // ...
    app.UseAuthorization();
    // ...
}

控制器中使用身份认证:在需要进行身份认证的控制器或操作方法上添加 [Authorize] 标签。

[ApiController]
[Route("api/[controller]")]
[Authorize]
public class MyController : ControllerBase
{
    // ...
}

生成 JWT:在用户登录成功后,可以使用 System.IdentityModel.Tokens.Jwt 包来生成 JWT。可以在登录控制器的操作方法中添加以下代码:

using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;
// ...
[HttpPost("login")]
public IActionResult Login(string username, string password)
{
    // 验证用户名和密码
    // 生成 JWT
    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.UTF8.GetBytes("your_secret_key");
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(new Claim[]
        {
            new Claim(ClaimTypes.Name, username)
        }),
        Expires = DateTime.UtcNow.AddHours(1),
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
    };
    var token = tokenHandler.CreateToken(tokenDescriptor);
    var tokenString = tokenHandler.WriteToken(token);
    return Ok(new { Token = tokenString });
}

以上是基本的实现步骤,通过配置 JWT 身份认证服务和中间件,以及使用 [Authorize] 标签来保护需要认证的资源,即可实现 JWT 的身份认证功能。在生成 JWT 的过程中,可以根据需要设置有效期、加密算法等参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值