.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. Clickhouse 极简单机版本安装部署

    Clickhouse 极简单机版本安装部署 摘要 Clickhouse的安装与部署其实比较简单. 但是为了能够更加简单的部署与使用. 尤其是能够可以方便的添加到镜像内进行运行. 所以记录一下方便快捷的 ...

  2. [转帖]Linux下进程管理知识(详细)总结

    一.简介 本文主要详细介绍进程相关的命令的使用.进程管理及调度策略的知识. 二.常用的命令解析 1.ps命令 命令选项 解析 -a 显示一个终端所有的进程 -u 显示进程的归属用户和内存占用情况 -x ...

  3. 【记录一个问题】VictoriaMetrics的vmstorage因为慢查询导致大量写入失败

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 见上图. 一直以为vmstorage中的查询协程会让位于写 ...

  4. 分页sql大全

    一.排除Top分页法(自命名,非规范) 思想:所谓"排除Top分页",主要依靠"排除"和Top这个两大核心步骤.首先查询当前页码之前的数据,然后将该数据从总数据 ...

  5. Golang Map底层实现简述

    Go的map是一种高效的数据结构,用于存储键值对.其底层实现是一个哈希表(hash table),下面是有关map底层实现的详细介绍: 哈希表: map的底层实现是一个哈希表,也称为散列表.哈希表是一 ...

  6. SqlSugar子查询

    1.基础教程 1.1 API目录 *****只查一列***** //First: SqlFunc.Subqueryable<School>().Where(s => s.Id ==  ...

  7. Linux 多种方式实现文件共享

    文件共享服务在Linux系统上有多种方式,最常用的有Samba,vsftp,iSCSI,NFS这四种方式,如下将分别配置四种不同的文件共享服务. VSFTP 文件传输 FTP是文件传输协议.用于Int ...

  8. 解决github无法进入问题,DNS加速

    1.电脑的hosts文件在下面这个地址,找到hosts文件 C:\Windows\System32\Drivers\etc 2.进入文件夹目录etc 找到hosts文件,使用记事本编辑 3.进入这个网 ...

  9. .net ELk 成功使用

    原文地址: http://t.zoukankan.com/shousiji-p-15222276.html

  10. 推荐一款开源的Diffy自动化测试框架

    1. 前言 软件测试是软件开发生命周期一个十分重要的环节,测试工作开展的好坏,很大程度上决定了产品质量的好坏,但软件产品随着版本的持续迭代,功能日益增多,系统愈加复杂,而从质量保障的角度,除了要保障好 ...