首页 > 其他分享 >.NET 8.0 中使用 JWT(JSON Web Token)进行身份验证和授权

.NET 8.0 中使用 JWT(JSON Web Token)进行身份验证和授权

时间:2024-08-11 14:06:33浏览次数:11  
标签:Web string 8.0 JWT Jwt 身份验证 using new public

在 .NET 8.0 中使用 JWT(JSON Web Token)进行身份验证和授权,通常需要以下几个步骤:

安装必要的 NuGet 包:

Microsoft.AspNetCore.Authentication.JwtBearer
配置 JWT 认证:

在 Program.cs 或 Startup.cs 中配置 JWT 认证。
生成和验证 JWT:

创建一个方法来生成 JWT。
在控制器中使用 JWT 进行身份验证。
以下是一个简单的示例:

  1. 安装 NuGet 包
    在项目目录中运行以下命令来安装必要的 NuGet 包:

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
CopyInsert
2. 配置 JWT 认证
在 Program.cs 中配置 JWT 认证:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;

var builder = WebApplication.CreateBuilder(args);

// 添加 JWT 认证服务
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
};
});

builder.Services.AddControllers();

var app = builder.Build();

// 启用认证和授权中间件
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();
CopyInsert
3. 生成和验证 JWT
创建一个方法来生成 JWT:

using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

public string GenerateJwtToken(string userId, string issuer, string audience, string key)
{
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

var claims = new[]
{
    new Claim(JwtRegisteredClaimNames.Sub, userId),
    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};

var token = new JwtSecurityToken(
    issuer: issuer,
    audience: audience,
    claims: claims,
    expires: DateTime.Now.AddMinutes(30),
    signingCredentials: credentials);

return new JwtSecurityTokenHandler().WriteToken(token);

}
CopyInsert
在控制器中使用 JWT 进行身份验证:

[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
private readonly IConfiguration _configuration;

public AuthController(IConfiguration configuration)
{
    _configuration = configuration;
}

[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel model)
{
    // 验证用户凭据
    if (model.Username == "validUser" && model.Password == "validPassword")
    {
        var token = GenerateJwtToken(model.Username, _configuration["Jwt:Issuer"], _configuration["Jwt:Audience"], _configuration["Jwt:Key"]);
        return Ok(new { token });
    }

    return Unauthorized();
}

}

public class LoginModel
{
public string Username { get; set; }
public string Password { get; set; }
}
CopyInsert
4. 配置 appsettings.json
在 appsettings.json 中添加 JWT 配置:

{
"Jwt": {
"Key": "your_secret_key_here",
"Issuer": "your_issuer",
"Audience": "your_audience"
}
}
这样,你就可以在 .NET 8.0 中使用 JWT 进行身份验证和授权了。

标签:Web,string,8.0,JWT,Jwt,身份验证,using,new,public
From: https://www.cnblogs.com/zy8899/p/18353319

相关文章

  • 在 .NET 8.0 中,授权策略
    在.NET8.0中,授权策略(AuthorizationPolicies)是一种强大的机制,用于定义和应用复杂的授权规则。授权策略可以基于用户角色、声明、自定义要求等来控制对资源的访问。以下是如何在.NET8.0中配置和使用授权策略的步骤:安装必要的NuGet包确保你已经安装了Microsoft.AspNet......
  • 深入了解HTML链接:从基础到进阶——WEB开发系列06
    超链接是互联网中最有趣的创新之一,自互联网诞生起,它们就一直是互联网的一个核心特性,使网络成为一个互联的系统。超链接允许我们将文档连接到其他文档或资源,甚至是文档中的特定部分。通过一个简单的网址,可以提供应用程序。几乎所有网络内容都可以被转换为链接,点击或激活这些超链......
  • stable diffusion webui docker 离线部署
    AI绘图工具StableDiffusionStableDiffusion是一种基于扩散技术的深度学习文本到图像模型,于2022年发布,该项目由StabilityAI、CompVis、Runway合作开发,它主要用于文生图,但也可以应用于其他任务,如Inpainting(补画、Outpainting(扩画)、图生图等。Inpainting称......
  • stable-diffusion-webui-1.10.0 安装
    1.下载webui源码地址:https://github.com/AUTOMATIC1111/stable-diffusion-webuiclone或者下载压缩包解压。 2.启动双击 stable-diffusion-webui-1.10.0\webui-user.bat文件会下载pytorch,下载速度很慢,可以复制链接 https://download.pytorch.org/whl/cu121/torch-......
  • web渗透-反序列化
    一:概念1、序列化:将变量转化为可保存或者可以传输的字符串的过程;实现函数是serialize()函数(变量转化成字符串)2、反序列化:把这个字符串在转化成原来变量使用;就是序列化的逆过程;实现函数是unserialize()函数(字符串转换成变量)3、示例<?phpclassStudent{ public$name="admin";......
  • 基于Java Web的社区新闻推荐系统/资讯网站
     目录摘要Abstract1引言1.1研究背景1.2研究现状1.3主要研究内容2相关技术2.1Java介绍2.2MySQL数据库2.3Tomcat2.4Vue框架3需求分析3.1功能需求分析3.2非功能需求分析3.3可行性分析4系统设计4.1系统功能设计4.2系统流程设......
  • http.sys 是 IIS 的底层组件,负责高效、安全地处理 HTTP 请求,而 IIS 则提供了更高层次
    IIS(InternetInformationServices)和http.sys是MicrosoftWindows操作系统中的两个相关组件,它们一起工作来处理和管理HTTP请求。以下是它们的关系和功能:IIS:Web服务器:IIS是Microsoft的Web服务器软件,提供了用于托管和管理Web应用程序的功能,包括网站、应用程序......
  • 秒开WebView?Android性能优化全攻略
    在Android应用中,WebView组件被广泛用于显示网页内容。然而,由于WebView的一些固有限制和资源消耗,它可能会导致应用启动变慢或响应速度下降。下面是一些优化WebView性能的策略,以帮助你实现“秒开”效果:1.减少初始化时间• 延迟加载:不要在应用启动时立即初始化WebView,......
  • Web前端开发环境搭建
    安装node.js和npm上官网下载:https://nodejs.org/zh-cn不管macOS还是Windows,下载的都是安装程序,按提示完成即可。安装前的提示如下:Thispackagewillinstall: • Node.jsv20.16.0to/usr/local/bin/node • npmv10.8.1to/usr/local/bin/npm安装成功后,可看到如......
  • 基于 Clouflare+D1 的web访客统计服务
    项目地址https://github.com/yestool/analytics_with_cloudflare部署步骤安装依赖npminstall-gwranglernpminstallhono创建D1数据库:web_analytics数据库名称为web_analytics,与package.json内保持一致npxwranglerd1createweb_analytics运行后控制台......