一:常见的HTTP鉴权协议
REST表述性状态转移(Representational State Transfer),是基于HTTP的web服务设计风格,一个 RESTFUL API 是无状态的,这意味着认证请求应当不能依赖于cookie或session。
常见的HTTP鉴权方法有:
HTTP BASIC
将用户信息以base64编码放入header中,后端直接从header中取出Authorization,然后进行base解码。在不使用HTTPS协议的情况䡋,安全性很低。
HTTP DIGEST
客户端先发送一次请求,服务端认证失败返回401并附加一个唯一性的nonce编码,客户端收到401信息,将nonce编码,用户信息,请求参数生成摘要(通常为MD5)信息,客户端附带摘要信息,再次发送请求。
安全性比HTTP BASIC高,由于nonce编码的唯一性可以防止重放攻击。但是客户端需要发送两次请求,而且每种web服务器和客户端环境对HTTP DIGEST的支持方式和支持程度不一致。
OAUTH2
更关注授权操作,而不是鉴权。更多使用与第三方授权,比如通过QQ用户信息更登陆简书就可以使用OAUTH2协议。常用的鉴权框架spring security、shiro都支持这种协议的集成。
二:API ID+HMAC鉴权方式
1、appId:是用于确定客户端的唯一性标示符。
2、HMAC :是基于散列的消息认证码(Hash-based MessageAuthentication Code)。
3、appKey: 秘钥,用于HMAC算法生成数字摘要,秘钥由服务端生成,一个appId对应一个秘钥。
4、客户端持有API ID和APP KEY。
5、每次请求前,将请求参数的名称按照自然顺序进行排序,然后依次取出这些参数的值进行连接字符串操作生成baseString,将appId,timestamp(当前时间戳精度为毫秒)也连接到baseString后面。使用HMAC摘要算法和秘钥APP KEY生成数组摘要digest。
6:客户端发送请求时将apiId、timestamp、digest三个参数带着,如GET方式的请求:parameter1=p1¶meter2=p2&apiId=API KEY&digest=digest×tamp=timestamp。如果您想要参数不可见可以使用AES进行加密传输。
7:服务端验证,首先要求apiId、digest、timestamp三个参数不能为空,然后用和客户端生成摘要相同的步骤生成服务端摘要,与客户端传入的摘要相比较,并从数据库已使用过的摘要,检查此摘要是否是使用过的,两个摘要比对进行验签,验签成功后将摘要存入已用摘要表。
三、小结
这种鉴权处理方式的特点:
1、不在网络上传递用户口令。
2、请求参数进行加密传输,防止敏感信息外泄。
3、采用HMAC摘要防篡改。
4、摘要中加入时间戳,每个摘要只允许使用一次,防止重放攻击。
jsets-shiro-spring-boot-starter中封装了HMAC的鉴权,请参见:
项目文档、源码
项目中经常用到的功能比如:验证码、密码错误次数限制、账号唯一用户登陆、动态URL过滤规则、无状态鉴权等等jsets-shiro-spring-boot-starter对这些常用的功能进行了封装和自动导入,少量的配置就可以应用在项目中。
1、jsets-shiro-spring-boot-starter项目详情请参见:jsets-shiro-spring-boot-starter
2、应用示例源码请参见:jsets-shiro-demo
3、jsets-shiro-spring-boot-starter使用说明请参见:使用说明
相关推荐
拍拍API新版鉴权要用到的HMAC函数. Step 3. 生成签名值 1. 使用HMAC-SHA1加密算法,将Step1中的到的源串以及Step2中得到的密钥进行加密。 (注:一般程序语言中会内置HMAC-SHA1加密算法的函数,例如PHP5.1.2之后...
rust-otp是一个 Rust 库,用于根据 RFC 4226 执行基于HMAC的一次性密码算法和根据RFC 6238执行基于时间的一次性密码算法。这些也是许多基于移动设备的 2FA 应用程序(例如Google Authenticator和Authy)用于生成 2FA...
C#基于Hmac sha256及Hmac sha 512 做的对称加密解密
春天hmac休息 RESTfull Web服务示例的Spring HMAC身份验证过滤器。 ... POST /api/echo HTTP/1.1 Accept: application/json, application/*+json Content-Type: application/...User-Agent: RestAPI client v.1.0 Content
针对我国远程电力监控通信系统的安全问题,提出了基于哈希认证码算法(HMAC)的安全方案。充分考虑了实时嵌入 式电网终端设备的局限性,设计和实现了数据来源真实性和数据完整性验证、用户身份认证、基于角色的操作...
基于HMAC的SQL注入攻击防范策略.pdf
2、根据密钥因子和HMAC-SHA256算法计算Key 3、通过Visual Studio工具根据算法代码和canoe提供的模板编译成dll文件 4、此dll文件可用于canoe工程进行27安全访问通过加载CDD的时候链接dll文件 5、DIVA工程也依赖该DLL...
腾讯云·短信·TC3-HMAC-SHA256API3.0签名V3算法带发送例子
delphi的HMAC加密淘宝API对接,之前delphi的找不到,现在终于找到了;再也不用愁加密不对了;和淘宝阿里巴巴平台导入订单对接加密用
基于FPGA的HMAC-SM3硬件实现.pdf
Hmac.WebApi HMAC身份验证为每个使用者使用一个秘密密钥,使用者和服务器双方都知道该密钥对hmac哈希消息,应该使用HMAC256。 大多数情况下,将用户的哈希密码用作秘密密钥。 该消息通常是根据HTTP请求中的数据甚至...
分析了HMAC(Hash-based Message Authentication Code)算法存在的固有缺陷,给出了针对HMAC参数的伪造攻击实例。在此基础上,提出了一种采用混沌映射的构造HMAC的算法,该算法通过混沌迭代生成HMAC参数值,混沌系统...
HMAC-SHA1是一种安全的基于加密hash函数和共享密钥的消息认证协议。
HMAC算法,支持 hmac-md5 hmac-sha1 hmac-sha256 hmac-384 hmac-sha512。PEM文件纯易语言解析,载入,导出。FPX文件导入用于winhttp API 双向验证 等等(winhttpAPI 源码请自行在论坛里搜索,例子很多)。资源作者:...
C语言版的实现HMAC-SHA1和base64编码,已经对C++做了兼容处理,在VS下运行main.c代码,可以得到经过HMAC-SHA1处理后的结果,并且可以运行里面的base64编码函数得到想要的结果,可以用于连接阿里云MQTT
Go的基于HMAC和基于时间的一次性密码(HOTP和TOTP)库。 实现和 。 内容 在Authenticator App中注册 二维码 手动注册 默认值 HOTP参数 TOTP参数 支持的运营 生成HOTP和TOTP代码。 验证HOTP和TOTP代码。 将OTP...
labview基于MD5/HMAC等加密算法
hmac code in matlab encryption
HMAC-SHA256 implementation
对数据进行HMAC-SHA256或HMAC-SHA1加密的C代码,VC2008工程。加密代码来自网络,进行了适当整合。