.Net 6 WebAPI 使用JWT进行 授权认证

1、安装组件(Nuget)

Microsoft.AspNetCore.Authentication.JwtBearer

2、Program.cs 配置

//授权认证(使用JWT)

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(o =>

{

// 私钥

var secretByte = Encoding.UTF8.GetBytes("kdsfldsflkdslkflkdsflkdslfdslkflk");

o.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters

{

// 验证发布者

ValidateIssuer = true,

// 发布者信息

ValidIssuer = "BeiJingBW",

    // 验证接收者
ValidateAudience = true,
// 接收者
ValidAudience = "BeiJingBW", // 验证是否过期
ValidateLifetime = true, // 验证私钥
IssuerSigningKey = new SymmetricSecurityKey(secretByte) };

});

// 配置Swagger

builder.Services.AddSwaggerGen(o =>

{

// 显示 授权信息

o.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme()

{

Description = "添加JWT授权Token:Bearer Token值",

Name = "Authorization",

In = Microsoft.OpenApi.Models.ParameterLocation.Header,

Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey,

BearerFormat = "JWT",

Scheme = "Bearer"

});

o.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement

{

{

new OpenApiSecurityScheme

{

Reference = new OpenApiReference

{

Type = ReferenceType.SecurityScheme,

Id = "Bearer"

}

},

new string[]

{

        }
}
});

});

// 鉴权

app.UseAuthentication();

app.UseAuthorization();

3、控制器加授权认证 [Authorize],登录判定方法设置为匿名可访问 [AllowAnonymous]

[Route("api/[controller]/[action]")] // 路由配置

[ApiController]

[Authorize]

public class ECommerceController : ControllerBase

{

[HttpGet]

[AllowAnonymous]

public IActionResult Login(string? loginName, string? password)

{

// 登录判定

}

}

4、控制器中,编写生成 JWT Token 方法

///



/// 生成 JWT Token(令牌)

///

///

private string CreateTokenString()

{

//私钥

var secretByte = Encoding.UTF8.GetBytes("kdsfldsflkdslkflkdsflkdslfdslkflk");

// 非对称加密

var signingKey = new SymmetricSecurityKey(secretByte);

// 使用256 生成数字签名

var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);

// 生成Token

var token = new JwtSecurityToken(

issuer: "BeiJingBW",

audience: "BeiJingBW",

expires: DateTime.Now.AddDays(1), // 一天后过期

signingCredentials: signingCredentials

);

// 生成token 字符串

var strToken = new JwtSecurityTokenHandler().WriteToken(token);

return strToken;

}

5、登录方法中,登录成功要生成 JWT Token,返回给前端

///



/// 登录判定(可以匿名,也就是授权对它没有作业)

///

/// 登录名

/// 密码

///

[HttpGet]

[AllowAnonymous]

public IActionResult Login(string? loginName, string? password)

{

try

{

// 登录判定,登录成功

// 登录成功生成JWT Token

string strToken = this.CreateTokenString();

}

// 返回前端信息加Jwt token信息

return Ok(new

{

user = user,

token = strToken

});

}

catch (Exception ex)

{

// 错误日志

logger.LogError("登录判定出错!" + ex.Message);

throw;

}

}

6、Swagger中调试

运行登录方法,复制生成的 JWT token字符串。

点击 名上角 “Authorize” 按钮,在文本框中输入:Bearer token值,格式如:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODYyOTc3NTgsImlzcyI6IkJlaUppbmdCVyIsImF1ZCI6IkJlaUppbmdCVyJ9.hb9kZv_qj8Eosgnw6ayTf6nA2-07ym6p6xbVS237aI8,点击“Authorize”。

之后运行Swagger中的其它方法,它会自动加载 JWT token,方法正常运行。如果没有第2部,运行方法会提示无授权的错误。

7、前端Vue配置

7.1 main.js 配置

// 数据访问

import axios from 'axios'

// 添加JWT token信息

axios.defaults.headers.common["Authorization"] = "Bearer " + window.localStorage.getItem("token");

7.2 登录方法,成功登录后,写token信息到本地

methods:{

// 登录

login() {

// 登录判定

// 登录成功,写JWT的 token到本地

window.localStorage.setItem("token", res.data.token);

// 数据提交后端要加入新的Token值

this.axios.defaults.headers.common["Authorization"] =

"Bearer " + res.data.token;

}

}

.Net 6 WebAPI 使用JWT进行 授权认证配置的更多相关文章

  1. [转]三分钟学会.NET Core Jwt 策略授权认证

    [转]三分钟学会.NET Core Jwt 策略授权认证 一.前言# 大家好我又回来了,前几天讲过一个关于Jwt的身份验证最简单的案例,但是功能还是不够强大,不适用于真正的项目,是的,在真正面对复杂而 ...

  2. JWT实现授权认证

    目录 一. JWT是什么 二. JWT标准规范 三. 核心代码简析 四. 登录授权示例 五. JWT 使用方式 六. JWT注意事项 一. JWT是什么 JSON Web Token(JWT)是目前最 ...

  3. 三分钟学会.NET Core Jwt 策略授权认证

    一.前言 大家好我又回来了,前几天讲过一个关于Jwt的身份验证最简单的案例,但是功能还是不够强大,不适用于真正的项目,是的,在真正面对复杂而又苛刻的客户中,我们会不知所措,就现在需要将认证授权这一块也 ...

  4. CZGL.Auth: ASP.NET Core Jwt角色授权快速配置库

    CZGL.Auth CZGL.Auth 是一个基于 Jwt 实现的快速角色授权库,ASP.Net Core 的 Identity 默认的授权是 Cookie.而 Jwt 授权只提供了基础实现和接口,需 ...

  5. 重新拾取:ASP.NET Core WebApi 使用Swagger支持授权认证

    园子里已经有很多.NET Core 集成Swagger的文章,但对于使用授权的介绍蛮少的. public static class SwaggerServiceExtensions { public ...

  6. .NetCore WebApi——基于JWT的简单身份认证与授权(Swagger)

    上接:.NetCore WebApi——Swagger简单配置 任何项目都有权限这一关键部分.比如我们有许多接口.有的接口允许任何人访问,另有一些接口需要认证身份之后才可以访问:以保证重要数据不会泄露 ...

  7. 如何在 Net6.0 中对 WebAPI 进行 JWT 认证和授权

    一.简介 我们做微服务开发,或者说做分布式开发,有一项技术我们是避不开的,那就是WebAPI,在 Net6.0中,有两类 WebAPI,一类是极简 WebAPI,它砍掉了很多冗余的东西,更纯粹的是做 ...

  8. Asp.NetCore3.1 WebApi 使用Jwt 授权认证使用

    1:导入NuGet包 Microsoft.AspNetCore.Authentication.JwtBearer 2:配置 jwt相关信息 3:在 startUp中 public void Confi ...

  9. WebApi使用JWT认证(二)

    这是第二部:实现NetCore上的WebApi使用JWT认证 1.NetCore新建一个WebApi的项目 2.打开AppSettings.json,添加Jwt的信息,这里为了演示而已 { " ...

  10. ASP.NET Core WebApi基于JWT实现接口授权验证

    一.ASP.Net Core WebApi JWT课程前言 我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再 ...

随机推荐

  1. 【转帖】isolcpus功能与使用

    isolcpus功能存在已久,笔者追溯v2.6.11(2005年)那时内核就已经存在了isolcpus功能.根据kernel-parameters.txt 上的解释,"isolcpus功能用 ...

  2. [转帖]Nginx性能优化详解

    https://developer.aliyun.com/article/886146?spm=a2c6h.24874632.expert-profile.256.7c46cfe9h5DxWK 感觉文 ...

  3. Redis 菜鸟进阶

    Redis 菜鸟进阶 背景 最近产品一直要优化性能,加强高可用. 有一个课题是Redis高可用与性能调优. 我这边其实获取到的内容很有限. 最近济南疫情严重,自己锁骨骨折. 然后通勤时间基本上都用来查 ...

  4. Spring 应用合并之路(二):峰回路转,柳暗花明 | 京东云技术团队

    书接上文,前面在 Spring 应用合并之路(一):摸石头过河 介绍了几种不成功的经验,下面继续折腾- 四.仓库合并,独立容器 在经历了上面的尝试,在同事为啥不搞两个独立的容器提醒下,决定抛开 Spr ...

  5. 初识VUE响应式原理

    作者:京东零售 吴静 自从Vue发布以来,就受到了广大开发人员的青睐,提到Vue,我们首先想到的就是Vue的响应式系统,那响应式系统到底是怎么回事呢?接下来我就给大家简单介绍一下Vue中的响应式原理. ...

  6. 如何安装typescript-如何运行typescript

    如何安装 typescript npm install typescript -g 安装 ts 之前需要安装 node 哈 查看 ts 的版本 tsc -V 我的是 3.6.3 的版本 typescr ...

  7. SignalR系列文章01---MVC项目中创建demo

    1.  新建mvc项目,引入指定的nuget包 2.  新增加一个集成器类添加如下的代码 /// <summary> /// 供客户端调用的服务器端代码 /// </summary& ...

  8. 如何将数据库中的树结构表导出EXCEL

    我们常常会遇到这样的需求,将数据库中父子结构的表数据导出作为表头 我们实现的开发中就遇到这样的需求:将所有用户的权限表导出,权限作为表头 思路:sql求出每一条权限数据应该跨的行数,在代码中填充这些数 ...

  9. 数组 vs. 切片

    在Go编程语言中处理数据时,经常会遇到数组和切片.这两者是不同的数据结构,有各自的特性和用途.本文将对Go中的数组和切片进行比较,以帮助大家更好地理解它们. 1. 长度不同 一个主要的区别是长度.在G ...

  10. 使用telnet来调试游戏

    telnet是什么 Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力 但是,telnet因为采用明文 ...