首页 > 其他分享 >.Net 6 WebAPI 使用JWT进行 授权认证配置

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

时间:2024-02-25 19:11:27浏览次数:27  
标签:WebAPI Bearer 登录 JWT Token token new Net

.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;
}
}

标签:WebAPI,Bearer,登录,JWT,Token,token,new,Net
From: https://www.cnblogs.com/bdszr/p/18032758

相关文章

  • MCN公司,即Multi-Channel Network
    MCN公司MCN公司,即Multi-ChannelNetwork,是一种新型的数字内容营销和传播机构。它们通常专注于网络红人(KOL)的孵化、内容创作、分发和商业化。MCN公司通过签约和培养网络红人,利用这些红人的影响力在社交媒体、视频平台等渠道上推广品牌和产品。在中国,知名的MCN公......
  • 寒假学习 14 使用netcat 数据源测试Flume
    1.1  创建netcat.conf 1.2在/usr/flume/flume-1.7.0目录下启动flumeagent出现如下: 1.3启动Flume,在另一个终端(这里称为“Telnet终端”)中,输入命令“telnetlocalhost44444”  当输出错误:bash:telnet:commandnotfound…说明容器中没有telnet,需要下载:......
  • Net8 Autofac实现依赖注入(构造函数注入、属性注入)
    项目以net8建立为例子(net6也通用),使用Autofac实现构造函数注入、属性注入两种。引用以下packageAutofacAutofac.Extensions.DependencyInjectionMicrosoft.Extensions.DependencyModel在program下添加autofacbuilder.Host.UseServiceProviderFactory(newAutofacServicePr......
  • 10.Feign组件在NET中的简单使用
    安装包:SummerBootFeign是一种声明式服务调用组件,我们只需要声明一个接口并通过注解进行简单的配置(类似于Dao接口上面的Mapper注解一样)即可实现对HTTP接口的绑定。通过Feign,我们可以像调用本地方法一样来调用远程服务,而完全感觉不到这是在进行远程调用。Feign底层基于h......
  • PNG格式PNG(Portable Network Graphics)位图图形文件格式 无损压缩的图片格式,支持索引
    PNG(PortableNetworkGraphics)是一种位图图形文件格式,它是一种无损压缩的图片格式,支持索引、灰度、RGB和RGBA等多种颜色模式。PNG格式支持多种颜色模式,包括以下几种:索引色模式(IndexedColor):索引色模式使用一个颜色索引表来存储图像中使用的颜色。每个像素使用索引值来指定......
  • JWT(Token令牌)整合 SpringBoot
     前言:JWT(JSONWebToken)可以被称为令牌(token)。JWT是一种在网络应用中广泛使用的令牌格式,用于在用户和服务器之间传递安全可靠的信息。JWT通常包含了用户的身份信息和一些其他的元数据,被用作身份验证和授权。因此,人们经常将JWT简称为令牌(token)。 代码整合:1.导......
  • EvolveGCN Evolving Graph Convolutional Networks for Dynamic Graphs
    目录概符号说明EvolveGCN代码ParejaA.,DomeniconiG.,ChenJ.,MaT.,SuzumuraT.,KanezashiH.,KalerT.,SchardlT.B.andLeisersonC.E.EvolveGCN:Evolvinggraphconvolutionalnetworksfordynamicgraphs.AAAI,2019.概GCN用在动态图上的早期探索.符号......
  • C#版本与.NET版本对应关系以及各版本的特性
    C#版本.NET版本发布日期特性C#1.0.NETFramework1.02002-02-13委托、事件C#1.1.NETFramework1.12003-04-24APM(异步编程模型)C#2.0.NETFramework2.02005-11-07泛型、匿名方法、迭代器、可空类型C#3.0.NETFramework3.02007-11-06隐式类型......
  • session验证与jwt验证
    简单谈谈session验证和jwt验证session验证简化版原理1.用户rds登录login页面,服务器向用户端发送一个sessionid,同时服务器创建一个和这个sessionid相关的会话信息(用于该用户下次session验证)2.用户再次登录或者访问授权页面,将sessionid发送到服务器3.服务器通过保留的会话信......
  • IIS PUT请求.netcore6.0接口 报HTTP Error 405 - Method Not Allowed
    在新的服务器上部署了一个.netcore的项目,部分请求地址使用了put、delete方式,导致无法正常请求,报Error405-MethodNotAllowed。由于配置IIS时把“WebDAV发布”给勾选了,所以会导致拦截。服务器和IIS10配置如下图:解决方案服务器上删除“WebDAV发布”1、打开“控制面......