`
wj596
  • 浏览: 26616 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

基于HMAC的rest api鉴权处理

阅读更多

一:常见的HTTP鉴权协议

        REST表述性状态转移(Representational State Transfer),是基于HTTP的web服务设计风格,一个 RESTFUL API 是无状态的,这意味着认证请求应当不能依赖于cookie或session。

        常见的HTTP鉴权方法有:

        HTTP BASIC

        将用户信息以base64编码放入header中,后端直接从header中取出Authorization,然后进行base解码。在不使用HTTPS协议的情况䡋,安全性很低。

HTTP BASIC认证的编码实现

        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)。

HMAMD5摘要生成

        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&parameter2=p2&apiId=API KEY&digest=digest&timestamp=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使用说明请参见:使用说明

0
0
分享到:
评论

相关推荐

    拍拍API新版鉴权要用到的HMAC函数

    拍拍API新版鉴权要用到的HMAC函数. Step 3. 生成签名值 1. 使用HMAC-SHA1加密算法,将Step1中的到的源串以及Step2中得到的密钥进行加密。 (注:一般程序语言中会内置HMAC-SHA1加密算法的函数,例如PHP5.1.2之后...

    用于执行基于 HMAC 的一次性密码 (HOTP) 和基于时间的一次性密码 (TOTP) 算法的 Rust 库_代码_下载

    rust-otp是一个 Rust 库,用于根据 RFC 4226 执行基于HMAC的一次性密码算法和根据RFC 6238执行基于时间的一次性密码算法。这些也是许多基于移动设备的 2FA 应用程序(例如Google Authenticator和Authy)用于生成 2FA...

    阿里云点播URL鉴权处理流程

    ### 阿里云点播URL鉴权处理流程详解 #### 一、引言 随着互联网视频业务的蓬勃发展,阿里云点播服务成为了许多企业和个人首选的音视频托管平台之一。其中,URL鉴权作为保障内容安全的重要手段,对于防止视频资源被...

    C#基于Hmac sha256及Hmac sha 512 做的对称加密解密

    HMAC-SHA256和HMAC-SHA512分别基于SHA-256和SHA-512哈希算法,提供更强的安全性,因为它们生成更长的哈希值(分别为256位和512位)。 在C#中,可以使用System.Security.Cryptography命名空间下的类来实现HMAC算法。...

    spring-hmac-rest:RESTful Web服务示例的Spring HMAC身份验证过滤器

    春天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的SQL注入攻击防范策略.pdf

    在此背景下,本文提出了基于HMAC算法生成SQL语句印记的方法,以此来有效保护备案SQL的安全性,并在很大程度上防范SQL注入攻击。HMAC(Hash-based Message Authentication Code)是一种基于哈希函数和密钥的认证码...

    Spring Boot(四)之使用JWT和Spring Security保护REST API

    "Spring Boot使用JWT和Spring Security保护REST API" Spring Boot中的REST API保护是非常重要的,因为直接暴露API可能会带来很大的风险。因此,本文将介绍使用JWT(Json Web Token)和Spring Security来保护REST ...

    UDS-27服务基于HMAC-SHA256制作DLL文件

    2、根据密钥因子和HMAC-SHA256算法计算Key 3、通过Visual Studio工具根据算法代码和canoe提供的模板编译成dll文件 4、此dll文件可用于canoe工程进行27安全访问通过加载CDD的时候链接dll文件 5、DIVA工程也依赖该DLL...

    腾讯云·短信·TC3-HMAC-SHA256API3.0签名V3算法带发送例子

    本示例涉及的是`TC3-HMAC-SHA256`签名算法在API 3.0版本中的应用,该算法是一种安全的哈希消息认证码(HMAC)方法,用于确保数据在传输过程中的完整性和真实性。 `TC3-HMAC-SHA256`签名算法的核心在于使用密钥和SHA...

    基于FPGA的HMAC-SM3硬件实现.pdf

    总结来说,本文所介绍的基于FPGA的HMAC-SM3硬件实现,不仅提供了消息认证码(HMAC)的一种高效硬件实现方案,还探讨了如何利用FPGA的特性进行算法优化和资源复用,从而在实际应用中提高处理速度和节省硬件资源。...

    hmac.dll (HMACSHA1、HMACSHA256、HMACMD5)

    这些API通常会包括函数原型、参数说明、返回值以及错误处理等信息,对于理解和使用HMAC功能至关重要。 总结起来,HMAC是一种基于密钥的哈希函数,它结合了不同的哈希算法(如SHA1、SHA256和MD5),以增强数据完整性...

    HMAC-SHA1算法

    HMAC-SHA1(Hash-based Message Authentication Code using SHA1)是一种基于加密哈希函数和共享密钥的消息认证协议。该协议利用了SHA1哈希算法的强大功能,结合密钥管理技术,实现了对数据完整性和真实性的保护。 ...

    hmac-sha256.zip_HMAC-SHA224_hmac_hmac sha2_hmac sha256 c++_hmac-

    2. **消息处理**: 将消息与K_{i}进行异或操作后,通过SHA-256计算得到中间结果,然后将这个中间结果与K_{o}异或,再次通过SHA-256计算,最终得到HMAC值。 **三、C++实现** 在C++中实现HMAC-SHA256,你需要使用一个...

    OneNET平台鉴权token计算工具_物联网_鉴权

    该算法基于API密钥和特定的参数(如时间戳)生成一串唯一的哈希值。 3. **参数构造**:计算token时,通常需要包括设备ID、API密钥、过期时间戳等信息。这些参数按照特定格式组合,并进行哈希运算。 4. **token生成...

    HMAC-SHA1 算法签名 亲测可用

    HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的验证码,它结合了密钥和消息,生成一个固定长度的摘要,以此来检验消息的完整性和来源的合法性。SHA1是Secure Hash Algorithm 1的缩写,是一种...

    delphi的HMAC加密淘宝API对接

    delphi的HMAC加密淘宝API对接,之前delphi的找不到,现在终于找到了;再也不用愁加密不对了;和淘宝阿里巴巴平台导入订单对接加密用

    Hmac算法c语言实现

    2. **预处理密钥**:HMAC算法要求密钥首先进行处理,以便适应所选的哈希函数。如果密钥太长,需要先用哈希函数对其进行压缩。如果密钥太短,可以将其与特定填充值结合,以确保其长度至少等于哈希函数的块大小。 3. ...

    hmac加密算法的JS文件hmac-sha1.js

    在JavaScript中实现HMAC-SHA1加密解密操作对于确保网络通信安全至关重要,特别是在API调用、敏感数据传输等场景。 在"**hmac-sha1.js**"文件中,我们通常会看到以下关键知识点: 1. **哈希函数**:SHA1是哈希函数...

    HMAC SHA1加密 C语言源码

    标题中的“HMAC SHA1加密 C语言源码”是指一种基于哈希消息认证码(HMAC)和SHA1算法的加密方法,它在C语言环境中实现。HMAC(Hash-based Message Authentication Code)是一种用于验证数据完整性和来源的安全机制,...

Global site tag (gtag.js) - Google Analytics