一种在web应用中进行身份认证的方法技术

技术编号:32971186 阅读:53 留言:0更新日期:2022-04-09 11:38
本发明专利技术公开了一种在web应用中进行身份认证的方法,通过计算出需要在header中的Authorization字段填写signature值,从而实现鉴权,每次请求时就在header中添加,从而避免每一个请求都需要携带token所带来的弊端,这样不仅提高了验证效率,也增强了安全性。也增强了安全性。也增强了安全性。

【技术实现步骤摘要】
一种在web应用中进行身份认证的方法


[0001]本专利技术涉及web应用
,尤其涉及一种在web应用中进行身份认证的方法。

技术介绍

[0002]互联网诞生之初,Web基本上就是文档的浏览而已。既然是浏览,作为服务器,不需要记录用户在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议,就是请求加响应。
[0003]但是随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,就面临一个问题,那就是要管理会话,必须记住哪些用户登录系统,哪些用户往自己的购物车中放商品,也就是说必须把每个用户区分开,这是一个不小的挑战,因为HTTP请求是无状态的,所以想出的办法就是给大家发一个会话标识(session id),即一个随机的字串,每个用户收到的都不一样,每次发起HTTP请求的时候,把这个字符串一起发送给服务器,服务器就能区分是哪个用户发起的请求了。
[0004]这种方式虽然能进行对用户的识别,但是增加了服务器的压力。虽然每个用户只需要保存自己的session id,而服务器要保存所有用户的session id。如果访问服务器多了,就得有成千上万,甚至几十万个session id。因此,随着web技术的发展,为了验证请求的合法性,一般是通过cookie、session、token这三种方式进行校验。
[0005]cookie由服务器生成,发送给浏览器,浏览器把cookie以key,value的形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。
[0006]服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失;验证信息如果存在session中,则增大了服务器端存储的压力。
[0007]在大多数使用Web API的互联网公司中,tokens是多用户下处理认证的最佳方式,使用token进行身份验证有以下几大特性:1.无状态、可扩展2.支持移动设备3.跨程序调用;但也有弊端,验证信息如果存在数据库中,每次都要根据token查用户id,增加了数据库的开销;token一旦被截取,就很容易进行跨站请求伪造。

技术实现思路

[0008]本专利技术的目的就在于为了解决上述问题而提供一种在web应用中进行身份认证的方法,本专利技术解决该问题的方法本质是如何计算出需要在header中的Authorization字段填写signature值,从而实现鉴权。每次请求时就在header中添加,从而避免每一个请求都需要携带token所带来的弊端。这样不仅提高了验证效率,也增强了安全性。本专利技术的核心是如何计算这个signature的值,一旦计算完成,赋值给Authorization即可使用。
[0009]本专利技术通过以下技术方案来实现上述目的:
[0010]一种在web应用中进行身份认证的方法,包括以下步骤:
[0011]步骤一:生成请求行参数:
[0012]步骤二:引入app_secret:
[0013]使用Store将app_secret存储在本地;
[0014]在该文件中引入Store,并使用Store的getStr函数将app_secret引入;
[0015]步骤三:引入CryptoJS:
[0016]使用npm包管理器安装第三方库:crypto

js/crypto

js;
[0017]然后使用import引入到该文件中;
[0018]步骤四:加密:
[0019]给CryptoJS的HmacSHA256函数传递两个参数,分别是步骤一种第f步得到的apiRequestLineString和步骤二中引入的app_secret,然后赋值给signInitalValue;
[0020]步骤五:编码:
[0021]使用CryptoJS.enc.Base64.stringify函数对步骤四得到的signInitalValue进行base64编码,并赋值给base64String;
[0022]步骤六:进行urlcode编码:
[0023]使用js内置的encodeURIComponent函数对步骤五得到的base64String进行urlcode编码,并赋值给signature。
[0024]进一步方案为,所述步骤1具体方法如下:
[0025]a、使用js时间对象new Date()获取浏览器当前时间,并使用toUTCString进行格式转换,生成当前时间字符串currentDateString;
[0026]b、获取当前路径;通过拦截器中config参数中的url进行处理得到currentPath;
[0027]c、根据config中的method参数值,判断当前方法属于什么请求;如果是get请求或者delete请求,将其转换成大写赋值给变量apiRequestMethod;
[0028]d、定义一个请求行变量:apiRequestLine;如果请求方法中带有参数,则先将参数进行处理,并使用&符号进行连接,赋值给paramsArrays;
[0029]e、将第b步中的currentPath和paramsArrays使用?号进行连接,然后赋值给第3步中定义的apiRequestLine。如果没有参数值,则apiRequestLine就直接等于currentPath;
[0030]f、将第a步中的currentDateString加上\n,然后加上步骤c中的apiRequestMethod,在加上第e步的apiRequestLine和http,共同拼接成一个字符串,然后赋值给变量apiRequestLineString。
[0031]进一步方案为,还包括以下步骤:使用JSON.stringify函数对config中的data进行字符串转换;
[0032]对加密结果进行字符串转换。
[0033]进一步方案为,还包括以下步骤:将步骤六中计算得出的signature,拼接到
[0034]`hmacaccesskey="${accesskey}",algorithm="HMAC_SHA256",headers="x

date request

line",signature="${signature}"`字符串中;
[0035]在header中添加Authorization参数,将步骤一中得到的字符串赋值给该参数;
[0036]在本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种在web应用中进行身份认证的方法,其特征在于,包括以下步骤:步骤一:生成请求行参数:步骤二:引入app_secret:使用Store将app_secret存储在本地;在该文件中引入Store,并使用Store的getStr函数将app_secret引入;步骤三:引入CryptoJS:使用npm包管理器安装第三方库:crypto

js/crypto

js;然后使用import引入到该文件中;步骤四:加密:给CryptoJS的HmacSHA256函数传递两个参数,分别是步骤一种第f步得到的apiRequestLineString和步骤二中引入的app_secret,然后赋值给signInitalValue;步骤五:编码:使用CryptoJS.enc.Base64.stringify函数对步骤四得到的signInitalValue进行base64编码,并赋值给base64String;步骤六:进行urlcode编码:使用js内置的encodeURIComponent函数对步骤五得到的base64String进行urlcode编码,并赋值给signature。2.如权利要求1所述的一种在web应用中进行身份认证的方法,其特征在于,所述步骤1具体方法如下:a、使用js时间对象new Date()获取浏览器当前时间,并使用toUTCString进行格式转换,生成当前时间字符串currentDateString;b、获取当前路径;通过拦截器中config参数中的url进行处理得到currentPath;c、根据config中的method参数值,判断当前方法属于什么请求;如果是get请求或者delete请求,将其转换成大写赋值给变量apiRequestMethod;d、定义一个请求行变量:apiRequestLine;如果请求方法中带有参数,则先将参数进行处理,并使用&符号进行连接,赋值给paramsArrays;e、将第b步中的...

【专利技术属性】
技术研发人员:刘强
申请(专利权)人:四川启睿克科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1