雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

jwt是什么?.NET Core API如何使用JwtBearer验证

2024-10-12 18

JWT是JSON Web Token的缩写,是一种开放标准(RFC 7519),用于在网络上以安全和可靠的方式传输信息。它是一种被广泛使用的跨域身份验证解决方案,可以将用户信息、访问权限等加密后存储在Token中,然后通过网络传输到服务器端进行验证。

在.NET Core中,可以通过添加Microsoft.AspNetCore.Authentication.JwtBearer NuGet包来使用JWT身份验证。

下面是使用.NET Core API进行JWT身份验证的一些步骤:

首先,在Startup.cs文件的ConfigureServices方法中配置JWT身份验证:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "yourIssuer",
            ValidAudience = "yourAudience",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"))
        };
    });

在这里,我们使用AddAuthentication方法将JWT身份验证服务添加到应用程序服务集合中。然后,使用AddJwtBearer方法配置JWT身份验证选项。其中,TokenValidationParameters属性是必需的,用于配置身份验证的参数,包括颁发者、受众、签名密钥等。

ValidIssuer和ValidAudience是由应用程序开发人员自己定义的。它们是用于配置JWT身份验证的参数之一。

ValidIssuer指定JWT的签发者,也就是JWT的颁发者。可以将ValidIssuer设置为应用程序的名称或URL等,以确保只有由指定实体签发的JWT才能被接受。通常情况下,应该使用一个字符串表示Issuer的唯一标识符。

ValidAudience指定JWT的接收者。可以将ValidAudience设置为应用程序的名称或URL等,以确保只有具有指定接收者的应用程序才能使用JWT。通常情况下,应该使用一个字符串表示Audience的唯一标识符。

在实际应用中,Issuer和Audience的值应该根据应用程序的需求进行设置,以确保身份验证的安全性和准确性。例如,如果应用程序需要向不同的客户端提供不同的服务,则可以为每个客户端定义不同的Issuer和Audience,以保证每个客户端只能使用其自己的JWT进行身份验证。

在Configure方法中启用身份验证中间件:

app.UseAuthentication();

使用Authorize属性限制需要身份验证的API端点:

[Authorize]
[HttpGet]
public IActionResult Get()
{
    // your code here
}

在这里,我们使用Authorize属性标记需要身份验证的API端点。

生成JWT Token并将其返回给客户端:

[HttpPost]
public IActionResult Authenticate([FromBody] LoginViewModel model)
{
    // your code here
    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.ASCII.GetBytes("yourSecretKey");
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(new Claim[]
        {
            new Claim(ClaimTypes.Name, model.Username)
        }),
        Expires = DateTime.UtcNow.AddDays(7),
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
            SecurityAlgorithms.HmacSha256Signature)
    };
    var token = tokenHandler.CreateToken(tokenDescriptor);
    return Ok(new
    {
        Token = tokenHandler.WriteToken(token)
    });
}

在这里,我们使用JwtSecurityTokenHandler类生成JWT Token,然后将其作为匿名对象返回给客户端。在这里,我们可以在Payload中添加任何我们需要的信息。

更新于:6天前
赞一波!

文章评论

评论问答