ASP.NET Core MVC 使用 JWT 的示例

news/2024/10/19 2:25:14/
  1. 创建一个 ASP.NET Core MVC 项目。

  2. 添加 NuGet 包:

    • Microsoft.AspNetCore.Authentication.JwtBearer:用于支持 JWT 的身份验证。
    • System.IdentityModel.Tokens.Jwt:用于生成和验证 JWT。
  3. Startup.cs 文件中做如下修改:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;public class Startup
{// 省略其他代码public void ConfigureServices(IServiceCollection services){// 省略其他服务配置// 配置身份验证服务services.AddAuthentication(options =>{options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;}).AddJwtBearer(options =>{options.TokenValidationParameters = new TokenValidationParameters{ValidateIssuer = true,ValidateAudience = true,ValidateLifetime = true,ValidIssuer = "your_issuer",ValidAudience = "your_audience",IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))};});// 省略其他代码}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){// 省略其他配置app.UseRouting();// 启用身份验证中间件app.UseAuthentication();app.UseAuthorization();// 省略其他配置}
}

请注意,在上述代码中,您需要将以下参数替换为实际的值:

  • "your_issuer":发行者的标识符。
  • "your_audience":接收者的标识符。
  • "your_secret_key":用于签名和验证令牌的密钥。
  1. 创建一个控制器,并添加以下代码:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;public class HomeController : Controller
{[Authorize]public IActionResult Index(){// 从用户声明中获取用户名string username = User.Identity.Name;return View();}[Authorize(Roles = "Admin")]public IActionResult AdminOnlyAction(){return View();}[HttpPost("token")]public IActionResult GenerateToken(){// 在用户登录成功后生成并返回 JWTvar claims = new[]{new Claim(ClaimTypes.Name, "john.doe@example.com"),new Claim(ClaimTypes.Role, "Admin")};var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"));var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);var expires = DateTime.Now.AddDays(1);var token = new JwtSecurityToken(issuer: "your_issuer",audience: "your_audience",claims: claims,expires: expires,signingCredentials: credentials);string accessToken = new JwtSecurityTokenHandler().WriteToken(token);return Ok(new { AccessToken = accessToken });}
}


http://www.ppmy.cn/news/746857.html

相关文章

51单片机智能温控风扇

大三上学期写的一个课程设计,完成的功能就是读取当前环境温度,在数码管上显示,并根据其驱动风扇转动的快慢,另用键盘扫描实现了总开关,超过一定阈值蜂鸣器响起。用51单片机由于芯片问题,使用两个定时器&…

辉芒微FMD-FT60F024-RB-八位单片机

产品名称:辉芒微FMD-FT60F024-RB-八位单片机 产品型号:FT60F024-RB 代理品牌:kwansemi冠禹 产品封装:SOP-8封装 交期时间:现货一般当天交货,预定需电话详情. 发货货仓:深圳/香港 热门标签&#…

D2:Cake Baking(烤蛋糕)

原题:OpenJudge - 02:Cake Baking 翻译: 描述:一个香蕉蛋糕需要250克面粉、2根香蕉、75克糖和100克黄油,一个巧克力蛋糕需要200克面粉、75克可可粉、150克糖和150克黄油。一个巧克力蛋糕的利润是45,一个香蕉蛋糕的利…

C#(五十四)之线程Mutex互斥

Mutex(互斥体): 排他性的使用共享资源称为线程间的互斥。 使用Mutex类要比使用monitor类消耗更多的系统资源,但他可以跨越多个应用程序,在多个应用程序间同步。 构造函数 Mutex() 使用默认属性初始化 Mutex 类的新…

ssd2828 RGB转MIPI接口调试记录

问题描述: 主控芯片通过spi接口对ssd2828芯片进行配置,fpga输出RGB信号给ssd2828转换成MIPI信号输出到LCD无显示。 问题原因分析: MIPI屏控制芯片是HX8399,需要通过MIPI接口发送dcs命令对屏幕进行初始化。 解决措施:…

一次阿里云Schedulerx换成Spring定时任务的过程

1、当前现状 所有的任务已经迁移到阿里云Schedulerx;阿里云Schedulerx是按照调用次数收费,有些任务每秒调用一次,费用太高; 2、明确需求 需要把执行非常频繁的定时任务从阿里云迁移(阿里云收费根据调用次数&#xff0c…

Linux 磁盘划分规则,如何规范的划分,比如300G, 900G,1T, 2T都是如何划分比较好。

Linux磁盘划分规则可以参考下面的建议: 1.根目录 (/):根目录是Linux文件系统的根节点,所有其他目录和文件都是从此目录开始的。根目录使用50GB的空间足以满足绝大部分应用,但如果您需要存储更多的数据或支持更多的应用程序&#…

Centos6.7创建逻辑卷挂载1T机械硬盘

今天公司需要,做一个SVN服务器,然后安装Centos系统,服务器的硬盘是固态硬盘1T机械硬盘 然后就把系统安装到固态硬盘中去了,采用的自动分区,安装过程不再赘述,网上已有大把的教程了 一、先扔一个各种卷的概…