RESTful API是基于HTTP协议的API(Application Programming Interface),它的核心是将所有的API都理解为一个网络资源,客户端请求资源时操作的是资源的表述而不是资源本身,每条请求都应包含足够的信息来让服务器知道如何处理该消息,即将所有的客户端和服务器的状态转移封装到HTTP请求的Method之中,它拥有Url唯一资源对应的特性。

由于RESTful Api是基于HTTP协议的API,并且是无状态传输,意味着服务器不会保存客户端的状态,每一次的调用和上一次调用请求是完全无关的,而且在如今的云计算厂商广泛的搭SaaS(Software-as-a-service)平台,将云计算和移动应用相结合,可以随时地交付和使用软件服务,通过对外部用户暴露一定开放性的RESTful API来实现交互,所以如今针对RESTful API通信的攻击手段也越来越多,如通过中间人攻击方式给系统造成重大安全隐患。正是由于这种原因RESTful架构的web系统需要在API接口调用上做好安全防护,防止出现API重放攻击,所以身份认证是RESTful API的关键问题。

目前常见的身份认证方法有如下几种:

1)HTTP Basic Authentication(HTTP基本认证):当访问一个需要这种方式的URL的时候,通常需要在请求头中添加加BASE64编码后的用户名和密码字符串当作认证信息或者直接在url添加BASE64编码后的用户名和密码字符串,服务器收到请求包后会对用户名密码进行解密并验证正确性,认证成功则认证信息会保存在session中,在session有效期内就不用再认证了。如果没有通过验证,服务器会返回“401 Unauthorized”状态码到客户端。

2)HTTP Digest Authentication(HTTP摘要认证):这种方式是HTTP Basic Authentication的改进版本,它采用摘要代替密码的传输,并且采用MD5之类的不可逆哈希算法对密码加密。为了防止重放攻击,客户端第一次请求时,通过服务端生成的随机数将这个随机数放在WWW-Authenticate响应头发送回客户端,每次计算摘要时先将这个随机数附加到摘要中。服务器拿到摘要后根据客户端的ID信息,从数据库取出客户端密码进行同样的计算得出的摘要进行对比,匹配则身份验证通过。

3)Access Token(访问令牌):客户端登陆完成之后,服务端会生成一个有时效性的token返回给客户端,以后每次请求客户端都需要带上token,即当作URL参数发送,如“http://demo.com/users?access-token=xxxxxx”,服务端以此来控制身份,当token过期后,服务端会销毁token,客户端需要重新请求获得token。

4)OAuth(开放授权):OAuth协议是一个授权的开放网络标准,目前版本是2.0。OAuth通过在客户端和服务器之间设置一个授权服务器,当客户端请求服务器资源时,服务器将客户端请求重定向到授权服务器,客户端通过登录授权服务器获取授权的Token,然后通过HTTP Bearer Tokens发送到资源服务器完成认证。现在的OAuth 2.0版本基于https协议,要求强制使用https协议。

常用到的几个概念:

重放攻击:

攻击者通过一系列办法窃取到了认证凭证,模仿用户来达到欺骗服务器的目的。

时间戳:

能用来唯一地标识某一刻的时间。可用来验证客户端和服务器之间传递时间消耗。如客户端发起的请求带上了时间戳,服务端收到后发现接受时间和发送时间相差60s,就可以拒绝请求。时间戳没有时区性,所以不用考虑客户端、服务器之间时区不一致问题。

签名:

使用哈希算法加密用户请求过程中的一些参数生成的不可逆密文,服务端接收到签名后用相同的流程生成签名进行认证。签名过程种可以通过随机数、时间戳来保证签名的一次性。

sign = BASE64(MD5(privatekey, HttpMethod, nonce, URIPath, parameters)));

RESTful Api 身份认证总结相关推荐

  1. RESTFUL API API身份认证

    核心内容: 1.介绍 API 身份验证的常用机制 2.介绍如何进行 API 身份验证 API身份认证: 在典型业务场景中,为了区分用户和安全保密,必须对 API 请求进行鉴权, 但是不能要求每一个请求 ...

  2. java鉴权_一个开箱即用的高效认证鉴权框架,专注于restful api的认证鉴权动态保护...

    作者:tomsun28 来源:SegmentFault 思否 写在开头 看了看这个专栏的最近一篇文章已经是两年前了,时间过得好快.应该是出学校后时间就很快了.两年前因为用shiro后,自己就按着想法开 ...

  3. 基于Node的PetShop,RESTful API以及认证

    前篇 - 基本认证,用户名密码 后篇 - OAuth2 认证 由于宠物店的业务发展需要,我们需要一种更加便捷的方式来管理日益增多的宠物和客户.最好的方法就是开发一个APP,我可以用这个APP来添加.更 ...

  4. php slim 教程,Slim - 超轻量级PHP Restful API构建框架

    下载源码包: http://www.slimframework.com/ 基于Slim的Restful API Sample: require '/darjuan/Slim/Slim.php'; us ...

  5. API 接口认证与传输数据加密

    应用场景 cmdb 这类项目的资产入库等操作,当agent 与server 端通过api 进行数据交互时,为了安全采取了两项安全措施:1.server 端需要对agent 端进行身份验证(避免有冒充a ...

  6. 服务器如何验证jwt,RESTful API使用JWT做无状态的身份认证-Go语言中文社区

    JWT设计 RESTful架构的前后端,天然要求API是无状态的,JWT(JSON Web Token)简单易用,适合在分布式系统中做API无状态的身份认证. jwt由Header.Payload.S ...

  7. 如何在5分钟内通过身份验证构建RESTful API —全部从命令行(第1部分)

    by Niharika Singh 由Niharika Singh 如何在5分钟内通过身份验证构建RESTful API -全部从命令行(第1部分) (How to Build a RESTful A ...

  8. 基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]

    基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid) ...

  9. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权

    在上一讲中,我们已经完成了一个完整的案例,在这个案例中,我们可以通过Angular单页面应用(SPA)进行登录,然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证.在 ...

最新文章

  1. python正则表达式_Python正则表达式简记和re库!
  2. iometer硬盘测试工具附教程
  3. 预告:2009年下半年软考试题及答案51CTO将实时发布
  4. Python 如何计算当前时间减少或增加一个月
  5. 建议三连,数据分析师的年终述职报告,留给你的年终报告吧
  6. C# OOP 重要部分全解
  7. a113 智能音箱芯片方案_高通入局智能音箱,首款四核单芯片方案曝光
  8. Sitecore 8.2 页面架构设计:模板与组件
  9. ai怎么调界面大小_Illustrator怎么设置调整界面网格呢?
  10. 一次library cache pin故障的解决过程
  11. 4.SOA架构:服务和微服务分析及设计--- Web服务及微服务的分析与建模
  12. 微信小程序富文本三种方法+0.1rich-text+0.2插件+0.3webview
  13. 免费书籍库,供大家收藏
  14. 个人理财通Android手机测试,基于Android的个人理财管理系统
  15. iOS UIcollectionview 数据量少时候bounces无效的解决方法
  16. MacOS 安装 JDK1.8
  17. XXL-JOB 任务调度中心 后台任意命令执行漏洞
  18. 使用 canvas2image 出现的一些错误
  19. 探明地下水监测“黑洞”,新一代三维GIS技术这样做!
  20. 金仓数据库KingbaseES之存储过程的RETURN语句

热门文章

  1. O准备如何苟进复赛圈?华为软挑开挂指南(附赛题预测)
  2. 读后感《富爸爸穷爸爸》
  3. Microsoft Azure IoT Hub应用 – 第一部分:向云端发送数据
  4. 安卓加密软件_【winhex/Xways实战应用】安卓QQ卸载后的手工恢复实战
  5. Whatsns内容付费seo优化带采集和熊掌号运营问答系统
  6. Echarts绘制不均匀数据轴(y)
  7. 语文课内外杂志语文课内外杂志社语文课内外杂志社2022年第14期目录
  8. 【摘自网易博客】FireFox与IE中CSS兼容技术集绵整理
  9. 搭建论坛那些小事儿(phpwind、wordpress)
  10. Cannot access ‘androidx.lifecycle.HasDefaultViewModelProviderFactory‘ which is a supertype of ‘com.e