.NET JWT认证的实现与使用方法

一、JWT认证简介

首先,JWT全称为JSON Web Token,是一种轻量级的认证和授权方式,采用JSON格式传递信息,在HTTP请求头中进行传递,通常被用来作为API的安全验证方式。JWT由三部分组成:头部、载荷和签名。头部存储加密算法和令牌类型等信息,载荷包含了需要传递的用户信息以及其他元数据,签名用于验证令牌的合法性。

二、安装NuGet包

在Visual Studio中,我们可以通过NuGet包管理器来安装JWT相关的依赖包。打开NuGet包管理器,搜索安装Microsoft.AspNetCore.Authentication.JwtBearer包,这个包提供了JWT认证相关的操作和中间件。

// 安装NuGet包
Install-Package Microsoft.AspNetCore.Authentication.JwtBearer

三、JWT认证配置

接下来,我们需要在Startup.cs文件中,进行JWT认证的配置。在ConfigureServices方法中,添加JWT认证相关配置。

// 引入命名空间
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;

// JWT认证配置
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.RequireHttpsMetadata = false;
        options.SaveToken = true;
        options.TokenValidationParameters = new TokenValidationParameters
        {
            // 验证发行人
            ValidateIssuer = true,
            ValidIssuer = Configuration["Jwt:Issuer"],
            
            // 验证接收人
            ValidateAudience = true,
            ValidAudience = Configuration["Jwt:Audience"],
            
            // 验证令牌签名
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Secret"]))
        };
    });

在上面的配置中,我们指定了验证发行人、接收人和验证令牌签名所需的密钥。需要注意的是,在实际应用中,请将密钥保存在安全可靠的地方,避免泄露。

四、JWT令牌生成

在进行JWT认证时,需要先生成JWT令牌。我们可以在AuthenticationController.cs文件中,添加一个GenerateJwtToken方法来生成JWT令牌。

// 引入命名空间
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;

// 生成JWT令牌
[AllowAnonymous]
[HttpPost]
[Route("authenticate")]
public ActionResult GenerateJwtToken([FromBody] User userParam)
{
    // 验证用户信息
    var user = _userService.Authenticate(userParam.Username, userParam.Password);
    if (user == null)
        return BadRequest(new { message = "账号或密码错误" });

    // 生成令牌
    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.ASCII.GetBytes(_configuration["Jwt:Secret"]);
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(new Claim[] 
        {
            new Claim(ClaimTypes.Name, user.Id.ToString())
        }),
        Expires = DateTime.UtcNow.AddDays(7),
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
    };
    var token = tokenHandler.CreateToken(tokenDescriptor);
    var tokenString = tokenHandler.WriteToken(token);

    return Ok(new { Token = tokenString });
}

在上面的代码中,我们首先验证了用户的账号和密码,然后按照JWT认证规范生成JWT令牌,并将令牌返回给客户端。在生成令牌时,我们设置了过期时间和签名规则等信息,以保证令牌的安全性。

五、使用JWT认证

在需要进行身份验证的地方,我们可以使用AuthenticateAttribute来开启JWT认证。

// 引入命名空间
using Microsoft.AspNetCore.Authorization;

// 使用JWT认证
[Authorize]
[HttpGet]
[Route("user")]
public ActionResult GetUser()
{
    // 获取当前用户信息
    var userId = User.Identity.Name;
    var user = _userService.GetById(int.Parse(userId));

    return Ok(user);
}

在上面的代码中,我们在需要获取用户信息的地方,使用了AuthorizeAttribute来开启JWT认证。只有在通过身份验证之后,才可以调用该方法获取用户信息。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/270516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-16 13:37
下一篇 2024-12-16 13:37

相关推荐

  • 解决.net 6.0运行闪退的方法

    如果你正在使用.net 6.0开发应用程序,可能会遇到程序闪退的情况。这篇文章将从多个方面为你解决这个问题。 一、代码问题 代码问题是导致.net 6.0程序闪退的主要原因之一。首…

    编程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一个类的构造函数,在创建对象时被调用。在本篇文章中,我们将从多个方面详细讨论init方法的作用,使用方法以及注意点。 一、定义init方法 在Pyth…

    编程 2025-04-29
  • Python符号定义和使用方法

    本文将从多个方面介绍Python符号的定义和使用方法,涉及注释、变量、运算符、条件语句和循环等多个方面。 一、注释 1、单行注释 # 这是一条单行注释 2、多行注释 “”” 这是一…

    编程 2025-04-29
  • Python下载到桌面图标使用方法用法介绍

    Python是一种高级编程语言,非常适合初学者,同时也深受老手喜爱。在Python中,如果我们想要将某个程序下载到桌面上,需要注意一些细节。本文将从多个方面对Python下载到桌面…

    编程 2025-04-29
  • Python匿名变量的使用方法

    Python中的匿名变量是指使用“_”来代替变量名的特殊变量。这篇文章将从多个方面介绍匿名变量的使用方法。 一、作为占位符 匿名变量通常用作占位符,用于代替一个不需要使用的变量。例…

    编程 2025-04-29
  • 百度地区热力图的介绍和使用方法

    本文将详细介绍百度地区热力图的使用方法和相关知识。 一、什么是百度地区热力图 百度地区热力图是一种用于展示区域内某种数据分布情况的地图呈现方式。它通过一张地图上不同区域的颜色深浅,…

    编程 2025-04-29
  • JWT验证Token的实现

    本文将从以下几个方面对JWT验证Token进行详细的阐述,包括:JWT概述、JWT验证Token的意义、JWT验证Token的过程、JWT验证Token的代码实现、JWT验证Tok…

    编程 2025-04-29
  • Matlab中addpath的使用方法

    addpath函数是Matlab中的一个非常常用的函数,它可以在Matlab环境中增加一个或者多个文件夹的路径,使得Matlab可以在需要时自动搜索到这些文件夹中的函数。因此,学会…

    编程 2025-04-29
  • Python函数重载的使用方法和注意事项

    Python是一种动态语言,它的函数重载特性有些不同于静态语言,本文将会从使用方法、注意事项等多个方面详细阐述Python函数重载,帮助读者更好地应用Python函数重载。 一、基…

    编程 2025-04-28
  • Python同步赋值语句的使用方法和注意事项

    Python同步赋值语句是Python中用来同时为多个变量赋值的一种方法。通过这种方式,可以很方便地同时为多个变量赋值,从而提高代码的可读性和编写效率。下面从多个方面详细介绍Pyt…

    编程 2025-04-28

发表回复

登录后才能评论