1.Start up 里面配置JWT认证方案

       //认证方案
services.AddAuthentication(option =>
{
option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
option.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(
option =>
{
option.TokenValidationParameters = new TokenValidationParameters
{
//是否验证发行人
ValidateIssuer = true,
ValidIssuer = Configuration["JwtConfig:Issuer"],//发行人 //是否验证受众人
ValidateAudience = true,
ValidAudience = Configuration["JwtConfig:Audience"],//受众人 //是否验证密钥
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtConfig:key"])), ValidateLifetime = true, //验证生命周期 RequireExpirationTime = true, //过期时间 ClockSkew = TimeSpan.Zero //平滑过期偏移时间
};
}
);

2.appsettings.json配置JWT

  "JwtConfig": {
"key": "JWTStudyWebsite_DI20DXU3",
"Issuer": "mahang",
"Audience": "wlw"
}

3. 生成令牌, 示例:登录成功生成令牌

        /// <summary>
/// 登录
/// </summary>
/// <param name="RegisterEntity"></param>
/// <param name="RegisterUserPassword"></param>
/// <returns></returns>
public ResultDto Login(LoginDto loginDto)
{
ResultDto result = new ResultDto(); var registerName = registerRepository.Query(x => (x.RegisterUserName == loginDto.RegisterEntity || x.RegisterUserEmail == loginDto.RegisterEntity || x.RegisterUserPhone == loginDto.RegisterEntity)).FirstOrDefault(); var registerPassWord = registerRepository.Query(x => x.RegisterUserPassword == MD5HashUtility.MD5Hash(loginDto.RegisterUserPassword)); if (registerName == null && registerPassWord.Count() == 0)
{
result.Message = "未注册,请先注册!";
return result;
}
else
{
if (registerName == null)
{
result.Message = "用户名输入错误,请重新输入!";
return result;
}
else
{
if (MD5HashUtility.MD5Hash(loginDto.RegisterUserPassword) != registerName.RegisterUserPassword)
{
result.Message = "密码输入错误,请重新输入!";
return result;
}
else
{
//写Session或Cookies换成JWT
IList<Claim> claims = new List<Claim> {
new Claim(JwtClaimTypes.Id,registerName.RegisterUserName),
new Claim(JwtClaimTypes.Name,registerName.RegisterUserPassword)
}; //JWT密钥
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["JwtConfig:key"])); //算法
var cred = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); //过期时间
DateTime expires = DateTime.UtcNow.AddHours(10); //Payload负载
var token = new JwtSecurityToken(
issuer: configuration["JwtConfig:Issuer"],
audience: configuration["JwtConfig:Audience"],
claims: claims,
notBefore: DateTime.UtcNow,
expires: expires,
signingCredentials: cred
); var handler = new JwtSecurityTokenHandler(); //生成令牌
string jwt = handler.WriteToken(token);
result.Code = 200;
result.Message = "登录成功!";
result.Success = new LoginDto
{
RegisterEntity = loginDto.RegisterEntity,
RegisterUserPassword = loginDto.RegisterUserPassword,
Token = jwt
};
}
}
}
return result;
}
}

4.Start up 在AddSwaggerGen中配置小锁

services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo { Title = "InterviewSystem.WebApi", Version = "v1" });
//xml显示swgger注释
options.IncludeXmlComments(System.IO.Directory.GetCurrentDirectory() + @"\\bin\\Debug\\net5.0\\InterviewSystem.WebApi.xml"); //开启权限小锁
options.OperationFilter<AddResponseHeadersFilter>();
options.OperationFilter<AppendAuthorizeToSummaryOperationFilter>();
options.OperationFilter<SecurityRequirementsOperationFilter>(); //在header中添加token,传递到后台
options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Description = "JWT授权(数据将在请求头中进行传递)直接在下面框中输入Bearer {token}(注意两者之间是一个空格) \"",
Name = "Authorization",//jwt默认的参数名称
In = ParameterLocation.Header,//jwt默认存放Authorization信息的位置(请求头中)
Type = SecuritySchemeType.ApiKey
});
});

5.配置相应的认证中间件和授权中间件

 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "InterviewSystem.WebApi v1"));
} //启用静态文件浏览功能
app.UseStaticFiles(); //Https中间件
app.UseHttpsRedirection(); // 跨域
app.UseCors(); //路由中间件
app.UseRouting(); //认证中间件
app.UseAuthentication(); //授权中间件
app.UseAuthorization(); app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

5.在控制器中添加全局特性

6.在Vue中,登录成功后用localStorage存储Token

//登录
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
axios
.post("Login/Login", this.ruleForm)
.then((res) => {
if (res.data.Code != 200) {
this.$message.error(res.data.Message);
} else {
this.$message({
message: res.data.Message,
type: "success",
});
sessionStorage.setItem("RegisterEntity",this.ruleForm.RegisterEntity);
localStorage.setItem("Token",res.data.Success.Token)
this.$router.push("/main/IntroductionVue");
}
});
} else {
console.log("error submit!!");
return false;
}
});
},

7.Vue配置js文件,全局使用Token

import axios from "axios"

axios.defaults.baseURL = "https://localhost:44386/api/";

axios.defaults.headers.common['Authorization'] = `Bearer ${localStorage.getItem("Token")}`;

export default axios

.Net Core WebApi + Vue前后端分离项目中的jwt令牌应用的更多相关文章

  1. 喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了

    折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...

  2. 两个开源的 Spring Boot + Vue 前后端分离项目

    折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...

  3. Springboot+vue前后端分离项目,poi导出excel提供用户下载的解决方案

    因为我们做的是前后端分离项目 无法采用response.write直接将文件流写出 我们采用阿里云oss 进行保存 再返回的结果对象里面保存我们的文件地址 废话不多说,上代码 Springboot 第 ...

  4. ASP.NET WebApi+Vue前后端分离之允许启用跨域请求

    前言: 这段时间接手了一个新需求,将一个ASP.NET MVC项目改成前后端分离项目.前端使用Vue,后端则是使用ASP.NET WebApi.在搭建完成前后端框架后,进行接口测试时发现了一个前后端分 ...

  5. Spring-Gateway与Spring-Security在前后端分离项目中的实践

    前言 网上貌似webflux这一套的SpringSecurity操作资料貌似很少. 自己研究了一波,记录下来做一点备忘,如果能帮到也在迷惑的人一点点,就更好了. 新项目是前后端分离的项目,前台vue, ...

  6. 分享我在前后端分离项目中Gitlab-CI的经验

    长话短说,今天分享我为前后端分离项目搭建Gitlab CI/CD流程的一些额外经验. Before Gitlab-ci是Gitlab提供的CI/CD特性,结合Gitlab简单友好的配置界面,能愉悦的在 ...

  7. 《论vue在前后端分离项目中的实践之年终总结》

    我是2014年的时候开始了解知道的vue,当时vue还不太成熟,想用但是又怕自己hold不住,况且那时候vue还没有成熟的(路由.验证.ui组件)插件,社区也是不温不火的,再说也没有合适的机遇让我去项 ...

  8. docker部署angular和asp.net core组成的前后端分离项目

    最近使用docker对项目进行了改进,把步骤记录一下,顺便说明一下项目的结构. 项目是前后端分离的项目,后端使用asp.net core 2.2,采用ddd+cqrs架构的分层思想,前端使用的是ang ...

  9. SpringBoot+Vue前后端分离项目,maven package自动打包整合

    起因:看过Dubbo管控台的都知道,人家是个前后端分离的项目,可是一条打包命令能让两个项目整合在一起,我早想这样玩玩了. 1. 建立个maven父项目 next 这个作为父工程,next Finish ...

  10. 在前后端分离项目中使用SpringBoot集成Shiro

    前言 这次在处理一个小项目时用到了前后端分离,服务端使用springboot2.x.权限验证使用了Shiro.前后端分离首先需要解决的是跨域问题,POST接口跨域时会预发送一个OPTIONS请求,浏览 ...

随机推荐

  1. 对服务器进行心跳检测 python django

    (由于春节期间连不上服务器,但又不知道是不是服务器关机了,因此写一个心跳检测功能遇到问题时可以排查部分原因) 具体来说分为客户端和服务端,客户端为校园服务器,服务端为我们自己搭建的http服务器.客户 ...

  2. 四种语言刷算法之 组合总和 II

    力扣40. 组合总和 II 1.C void back(int* candidates, int candidatesSize, int target,int start,int *path,int ...

  3. Vicinity Vision Transformer概述

    0.前言 相关资料: arxiv github 论文解读 论文基本信息: 发表时间:arxiv2022(2022.6.21) 1.针对的问题 视觉transformer计算复杂度和内存占用都是二次的, ...

  4. MDK GCC调试

    openocd调试 https://blog.csdn.net/chunyexixiaoyu/article/details/120448515

  5. Maven项目中配置文件资源导出问题

    标准的Maven项目都会有一个resources目录来存放我们所有的资源配置文件,但是我们往往在项目中不会把所有的资源配置文件都放在resources文件夹中,我们有可能放在项目中的其他位置,那么默认 ...

  6. Windows 11在使用AMD时,CPU占用率持续100%的解决方案

    一.现象 Windows 11在使用AMD时,CPU占用率持续100%,持续好几个系统版本都是如此 二.系统版本: 版本 Windows 11 专业工作站版版本 22H2安装日期 ‎2022/‎10/ ...

  7. 【面试题】面试官:请你实现一个深拷贝,那如果是正则/set/函数怎么拷贝?

    一.面试官灵魂三连问: 你知道哪些拷贝的方法? 让你实现一个深拷贝怎么实现? 那像正则.Set.Map.函数等如何拷贝? 二.浅拷贝方法 自己创建一个新对象,来接收你要重新复制或引用的对象值.如果对象 ...

  8. react native SectionList组件实现多选

    如下图所示: 代码如下: import React, { useRef, Component } from 'react'; import { Platform, Text, View, TextIn ...

  9. web-bootstrap-button

    20:51:55 页面上两个button 并列,且空出间隔.

  10. CPU性能测试-coremark

    测试CPU性能指标会用到 Benchmarks常见的为 Dhrystone 和 CoreMark. CoreMark是一个综合基准,用于测量嵌入式系统中使用的中央处理器(CPU)的性能.它是在2009 ...