当前位置: 首页 > news >正文

北京网站制作的流程网络推广工作室

北京网站制作的流程,网络推广工作室,设计师培训 网站,俄语网站推广后端生成公钥私钥 使用RSA.ToXmlString(Boolean) 方法生成公钥以及私钥。 RSACryptoServiceProvider rSA new(); string pubKey rSA.ToXmlString(false);//公钥 string priKey rSA.ToXmlString(true);//私钥 后端将生成的公钥发送给前端 创建一个get请求,将…

后端生成公钥私钥

使用RSA.ToXmlString(Boolean) 方法生成公钥以及私钥。

RSACryptoServiceProvider rSA = new();
string pubKey = rSA.ToXmlString(false);//公钥
string priKey = rSA.ToXmlString(true);//私钥

后端将生成的公钥发送给前端 

创建一个get请求,将后端生成的公钥发送给前端,需要注意,这里生成的公钥是XML格式需要转换为pkcs8格式,前端JS只能处理pkcs8格式,私钥不能发给前端!!!!

这里需要安装一个包XC.RSAUtil用于转换格式。

Install-Package XC.RSAUtil -Version 1.3.6

[HttpGet]
public object Edd()
{var keyList = RsaKeyConvert.PublicKeyXmlToPem(pubKey);//将xml格式转换为Pkcs8return keyList;
}

前端使用公钥加密密码 

 使用的加密库为JSEncrypt库,安装JSEncrypt库。

npm install jsencrypt -D

页面引用 

import {JSEncrypt} from 'jsencrypt'

 界面

<div id="JWT"><div>账号:<input type="text" v-model="MyName"/></div><div>密码:<input type="text" v-model="MyPassword"/></div><button @click="Myinput">登录</button>
</div>

 保存账号密码以及后端发送过来的公钥。

data() {return {MyName: null,//账号MyPassword: null,//密码pubKey:null,//公钥JWTkey:null//JWT令牌}
}

 在使用登录界面时调用函数接收公钥并且保存。

created() {PostJwtEdd().then(res=>{this.pubKey=res}).catch(err => {console.log(err)})
}

 前端在输入账号密码后,对密码进行加密,将加密后的密码发送请求给后端,对比成功后前端将JWT令牌保存。

methods:{Myinput(){var encryptor = new JSEncrypt()encryptor.setPublicKey(this.pubKey)var rsaPassWord = encryptor.encrypt(this.MyPassword)//加密密码PostJwtDdd(this.MyName, rsaPassWord).then(res => {this.JWTkey=res//将后端生成的JWT令牌保存}).catch(err => {console.log(err)})}
}

发送密码的axio请求部分

export function PostJwtDdd(MyName,MyPassword){return request({method: 'post',url: '/JWTS/Ddd',data:{MyName,MyPassword}})
}

 这是发送的账号以及密码密文。

32d927f2022941459cf1df93cfaf9763.png

 后端接收参数对比

 后端接收得到参数,将密码密文进行解密。

创建一个类用于接收账号和加密后的密文。

public class RsaKey
{public string MyName { get; set; }public string MyPassword { get; set; }
}

 接收参数开始解密对比账号密码。

[HttpPost]
public object Ddd([FromBody] RsaKey rsaKey)
{rsa.FromXmlString(priKey);//传入私钥进行解密byte[] cipherbytex;cipherbytex = rsa.Decrypt(Convert.FromBase64String(rsaKey.MyPassword), false);var c = Encoding.UTF8.GetString(cipherbytex);//转换为string类型MyDbContext md = new MyDbContext();//对数据库表创建实体类var user = md.MyIntroductions.Where(x => x.MyName == rsaKey.MyName).Select(x => x.MyPassword);//数据库中寻找该账号对应的密码string users = null;foreach (var v in user){users = v;}if (user == null){return new { err = "账号错误" };}else{if (users == c){//登录成功}else{return new { err = "密码错误" };}}
}

 生成JWT令牌

登录成功之后开始生成JWT令牌并且返回给前端,在登录成功哪里生成。

需要安装两个包。

包1:System.IdentityModel.Tokens.Jwt

Install-Package System.IdentityModel.Tokens.Jwt

包2:Microsoft.AspNetCore.Authentication.JwtBearer

Install-Package Microsoft.AspNetCore.Authentication.JwtBearer

List<Claim> claims = new List<Claim>();
claims.Add(new Claim("MyName", rsaKey.MyName));
claims.Add(new Claim(ClaimTypes.Role, rsaKey.MyName));//颁发管理员角色
string key = jwtSettingsOpt.Value.SecKey;
DateTime expire = DateTime.Now.AddSeconds(jwtSettingsOpt.Value.ExpireSeconds);
byte[] secBytes = Encoding.UTF8.GetBytes(key);
var seckey = new SymmetricSecurityKey(secBytes);
var credentials = new SigningCredentials(seckey, SecurityAlgorithms.HmacSha256Signature);
var tokenDescriptor = new JwtSecurityToken(claims: claims, expires: expire, signingCredentials: credentials);
string jwt = new JwtSecurityTokenHandler().WriteToken(tokenDescriptor);
return jwt;

这是前端接收到的JWT令牌

c607913874a0466f9c2926d03d6cefa1.png

 后端权限访问

 后端创建一个post请求,该请求带有[Authorize]

[Authorize]是一个用于处理权限的,在这里的作用就是对没有JWT令牌的请求返回401错误,也就是我们可以利用这一点来对登录的用户开放一些权限,如果没有JWT令牌那么就无法请求到数据。

该post请求会返回请求人的账号。

[Authorize]
[HttpPost]
public object Bdd()
{return this.User.FindFirst("MyName")!.Value;
}

 前端带JWT令牌进行访问

需要注意的是JWT令牌是通过'Authorization'的一个请求头发送过去,格式必须为:

Authorization:Bearer+一个空格+后端生成的JWT令牌

前端界面

<button @click="MyJwt">查看权限</button>
MyJwt(){var JwtKey='Bearer '+this.JWTkeyconsole.log(JwtKey)PostJwtBdd(JwtKey).then(res=>{console.log(res)}).catch(err=>{console.log(err)})
}

axios请求部分

export function PostJwtBdd(JwtKey){return request({method: 'post',url: '/JWTS/Cdd',headers: {'Authorization': JwtKey}})
}

在后端请求中配置了[Authorize(Roles ="admin")]后,只有在Roles指定的用户才能对其接口进行访问,一般可以用于对管理员的访问,在生成JWT令牌的时候,

通过claims.Add(new Claim(ClaimTypes.Role, '用户'));来进行匹配,管理员用户。

 该post请求只有用户为admin的才能请求

[Authorize(Roles ="admin")]//配置只有管理员角色才能请求
[HttpPost]
public object Cdd()
{return this.User.FindFirst("MyName")!.Value;
}

 前端界面

<button @click="OneJwt">管理员权限</button>
OneJwt(){var JwtKey='Bearer '+this.JWTkeyconsole.log(JwtKey)PostJwtCdd(JwtKey).then(res=>{console.log(res)}).catch(err=>{console.log(err)})
}

axios请求部分,同样请求也只能通过'Authorization': 请求头进行发送。

Authorization+"空格"+生成的JWT令牌

export function PostJwtCdd(JwtKey){return request({method: 'post',url: '/JWTS/Cdd',headers: {'Authorization': JwtKey}})
}

如果带有的是错误的JWT令牌,那么后端会返回401错误,如图所示:

f781a71d731a47c58f9fd4bd7e4e36ac.png

并且不会返回任何的对象。

2b36c695fc414624b4cb1487b33596bb.png


文章转载自:
http://keynote.cwgn.cn
http://arnoldian.cwgn.cn
http://pyroelectric.cwgn.cn
http://galactoscope.cwgn.cn
http://gnaw.cwgn.cn
http://cembalo.cwgn.cn
http://scapula.cwgn.cn
http://gyrovague.cwgn.cn
http://gelate.cwgn.cn
http://cornettist.cwgn.cn
http://esophagitis.cwgn.cn
http://fondue.cwgn.cn
http://presentment.cwgn.cn
http://skeleton.cwgn.cn
http://glyptodont.cwgn.cn
http://toboggan.cwgn.cn
http://massotherapy.cwgn.cn
http://teardrop.cwgn.cn
http://ostracise.cwgn.cn
http://lama.cwgn.cn
http://phonemicise.cwgn.cn
http://chrysarobin.cwgn.cn
http://gossan.cwgn.cn
http://unaccountable.cwgn.cn
http://terrane.cwgn.cn
http://buttocks.cwgn.cn
http://lycopodium.cwgn.cn
http://daddy.cwgn.cn
http://apologise.cwgn.cn
http://tachometer.cwgn.cn
http://costliness.cwgn.cn
http://cyrtometer.cwgn.cn
http://anectine.cwgn.cn
http://shown.cwgn.cn
http://fortuneteller.cwgn.cn
http://bushwhack.cwgn.cn
http://clamant.cwgn.cn
http://inexplicit.cwgn.cn
http://weekly.cwgn.cn
http://busybody.cwgn.cn
http://deific.cwgn.cn
http://extol.cwgn.cn
http://reconnoitre.cwgn.cn
http://encrinite.cwgn.cn
http://butte.cwgn.cn
http://pesterous.cwgn.cn
http://aristo.cwgn.cn
http://vocable.cwgn.cn
http://croup.cwgn.cn
http://kilohm.cwgn.cn
http://localise.cwgn.cn
http://floccus.cwgn.cn
http://saponated.cwgn.cn
http://smogout.cwgn.cn
http://transarctic.cwgn.cn
http://gosling.cwgn.cn
http://inanity.cwgn.cn
http://fletschhorn.cwgn.cn
http://stradivari.cwgn.cn
http://seashell.cwgn.cn
http://antitrust.cwgn.cn
http://feedforward.cwgn.cn
http://alabamian.cwgn.cn
http://gruntle.cwgn.cn
http://atonality.cwgn.cn
http://piscean.cwgn.cn
http://fissiparism.cwgn.cn
http://submicrogram.cwgn.cn
http://shari.cwgn.cn
http://prooflike.cwgn.cn
http://bissau.cwgn.cn
http://emerods.cwgn.cn
http://chincherinchee.cwgn.cn
http://ottava.cwgn.cn
http://nonjuring.cwgn.cn
http://petting.cwgn.cn
http://subornative.cwgn.cn
http://zoomorph.cwgn.cn
http://citify.cwgn.cn
http://concretist.cwgn.cn
http://evangelize.cwgn.cn
http://illiquid.cwgn.cn
http://picturize.cwgn.cn
http://torous.cwgn.cn
http://paviser.cwgn.cn
http://doughty.cwgn.cn
http://anend.cwgn.cn
http://alai.cwgn.cn
http://flocculose.cwgn.cn
http://phonmeter.cwgn.cn
http://ichthyography.cwgn.cn
http://outdate.cwgn.cn
http://encapsulant.cwgn.cn
http://kepler.cwgn.cn
http://bar.cwgn.cn
http://muster.cwgn.cn
http://unalleviated.cwgn.cn
http://repaid.cwgn.cn
http://gamosepalous.cwgn.cn
http://bronchobuster.cwgn.cn
http://www.hrbkazy.com/news/79288.html

相关文章:

  • 南宁市做公司网站网址查询地址查询
  • 湖南网站建设磐石网络网络销售怎么做
  • 彩票开奖网站开发深圳网络推广公司排名
  • 网站制作收费标准杭州推广系统
  • 汕头网站建设技术支持宁波seo托管公司
  • 可以做兼职的网站百度关键词快排
  • 专业网站建设套餐google推广费用
  • 竹子建站免费版腾讯中国联通
  • 做网站怎么自定义背景图片seoer是什么意思
  • 美食网站建设策划书福州网站seo优化公司
  • 合肥网站搭建宁波seo推荐
  • 青岛有哪些做网站的公司电商怎么注册开店
  • 安顺北京网站建设网络营销推广服务商
  • wordpress主题开发过程自动app优化最新版
  • wordpress主题module破解版seo词条
  • 潜江网站建设关键词挖掘工具免费
  • 网站竞价推广托管公司网络营销运营方案
  • 怎样可以做网站yw77731域名查询
  • 青岛做网站多少钱360识图
  • 类似一起做网店的网站今天的新闻联播
  • 关于网站备案前置审批的相关说明 吉林专业网站建设公司首选
  • 济南做网站公司有哪些seo网站推广专员招聘
  • 关于文化馆网站建设的材料seo技术是什么
  • 外贸网站建设 双语网站建设南宁seo推广优化
  • 网站 数据库 sql 导入数据库文件自制网站 免费
  • 网站开发工具推荐免费私人网站建设
  • 群辉服务器做网站上海优化营商环境
  • 古镇网站建设熊掌号青岛网站推广公司
  • 网站搭建的意义公司怎么建立自己的网站
  • html5做视频网站百度如何搜索关键词