.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. [转帖] 容器内的Linux诊断工具0x.tools

    https://www.cnblogs.com/codelogs/p/16242999.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# Linux上有 ...

  2. [转帖]看6大国产CPU加速替代,谁才是“王者”选手?

    https://baijiahao.baidu.com/s?id=1761150458273739276&wfr=spider&for=pc 2023-03-23 17:33湖北匠心计 ...

  3. SPECJVM2008的简单结果

    SPECJVM2008的简单结果 摘要 前面两天学习了SPECJVM2008简单使用. 今天进行一下简单的数据采集. 需要说明一下SPECJVM2008貌似仅兼容JDK1.8 更新的LTS版本都不兼容 ...

  4. 在bat中切换盘符

    在bat代码中如何在不同的盘符中切换?直接输入盘符的名字,前面不要加cd,示例 cd %~dp0 d: cd D:\Python37 e: cd E:\Code\KSFramework c: cd C ...

  5. springboot项目导入外部jar包的bean的几种方式

    背景 公司封装了基础包和日志包,将公共的配置抽取出来,供所有项目使用,因此就需要考虑,怎么引入外部jar包的Bean实例: 思考 因为公司的jar包就是普通的jar,不支持springboot的自动配 ...

  6. 若依、vue三级路由缓存失败

    router.beforeEach((to, from, next) => { NProgress.start() if (getToken()) { // 三级菜单组件无法缓存问题 if (t ...

  7. 7.6 Windows驱动开发:内核监控FileObject文件回调

    本篇文章与上一篇文章<内核注册并监控对象回调>所使用的方式是一样的都是使用ObRegisterCallbacks注册回调事件,只不过上一篇博文中LyShark将回调结构体OB_OPERAT ...

  8. C/C++ 实现简易HTTP服务器

    #include <stdio.h> #include <stdlib.h> #include <process.h> #include <WinSock2. ...

  9. Spark源码修改环境搭建

    过程中存在问题: maven编译scala工程报错java.lang.NoClassDefFoundError: scala/reflect/internal/Trees,解决方案看maven编译 1 ...

  10. 搭建私有仓库Registry(Docker Hub)

    搭建私有仓库Registry(Docker Hub) 安装Docker 拉取仓库镜像:# docker pull registry 生成认证certificate mkdir ~/certs open ...