一个Restful Api的访问控制方法

最近在做的两个项目,都需要使用Restful Api,接口的安全性和访问控制便成为一个问题,看了一下别家的API访问控制办法。

新浪的API访问控制使用的是AccessToken,有两种方式来使用该AccessToken:

1、API请求 URL 的后面加上一个AccessToken

2、Http头里面加一个字段AccessToken=xxx

这种AccessToken是写死在程序里面的,在每次请求的时候附带上,对于这种AccessToekn新浪那边有过期时间,过期之后就无法再使用了。

很明显这种方式是不安全的,一旦别人获取到这个AccessToekn 就可以伪装身份使用该API,这个访问控制就形同虚设了。但是新浪也知道这一点,所以利用这种方式使用的接口都是较为基础的接口,高级一点的接口需要使用Oauth 2.0进行二次认证的访问控制。

在我的项目中,没有像新浪微博账号这种的用户管理系统,做OAtuth认证不太合适,通过参考网上大神的资料,大致想了下面这种访问控制的办法。

1、为每个应用颁发一个账号(user)和密码(password),相当于(公钥和私钥)。

2、服务器后台存储该账号和密码(密文存储 MD5加密)

3、应用端在通过HTTP请求该接口的时候,需要在HTTP HEADER 附带下面几个字段

  • 时间date=unix时间戳
  • 签名sign=sign

该sign的生成算法是这样的

String sign = HTTPMETHOD(GET/POST)+ api_uri(API的访问URI)+date(即上面的UNIX时间戳)+length(发送body的数据长度)+password(后台颁发的密码)

sign = MD5(sign)

sign = user+":"+sign

4、后台服务器在接收到请求后

1、比对HTTP头中的时间戳,比对服务器时间,如果超过某个阈值,则拒绝访问,同时返回请校准你的应用时间。

2、如果没有超过时间阈值,则从sign中取出user然后在数据库中查找对应的password,然后同样根据上面的sign生成算法,来生成sign进行身份认证,认证成功则执行API,失败则返回认证失败。

一个Restful Api的访问控制方法,码迷,mamicode.com

时间: 2024-12-24 12:16:44

一个Restful Api的访问控制方法的相关文章

用python写一个restful API

# -*- coding: utf-8 -*- # 作者: 煮酒品茶 """ package.module ~~~~~~~~~~~~~~ python实现的图书的一个restful api. 参考restful设计指南 URL: http://www.ruanyifeng.com/blog/2014/05/restful_api.html restful api 一般模式: GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE):在服务器新建一个资

使用python的Flask实现一个RESTful API服务器端[翻译]

最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务. REST的六个特性: Client-Server:服务器端与客户端分离. Stateless(无状态):每次客户端请求必需包含完整的信息,换句话说,每一次请求都是独立的. Cacheable(可缓存):服务器端必需指定哪些请求是可以缓存的. Layered System(分层结构):服务器端与客

利用express搭建一个restful api 服务器

学习express有几天了,记录一下内容也给入门的兄弟们一点提示. 想要解决的问题: node开发过程中自动重启服务器,无需每次都要运行node index.js启动服务器(nodemon) 使用ES6,ES7 编写代码,自动编译 使用import,export新特性.(babel) 使用express开发RESTFUL API,模块化开发. 学习postman中的提交内容方式. 利用mongoose中间件来实现model层映射. 利用body-parser中间件来实现提交内容解析.(multi

使用Node.js + MongoDB 构建restful API

很多天前已经翻译了一大半了,今天收收尾~ RESTful API With Node.js + MongoDB Translated By 林凌灵 翻译目的:练练手,同时了解别人的思维方式 原文地址:RESTful API With Node.js + MongoDB 12 Sep 2013 我是一名移动应用开发者,我需要某种后端服务用来频繁地处理用户数据到数据库中.当然,我可以使用后端即服务类的网站(Parse, Backendless, 等等-),(译者:国内比较出名的有Bmob).但自己解

使用PHP创建一个REST API(译)

最近API在网络领域有些风靡,明确的说是REST的影响力.这实在没什么好惊讶的,因为在任何编程语言中,消费REST API都是非常的容易.构建它也非常的简单,因为本质上你不会用到任何那些已存在很久的HTTP细则.由于Rails对REST做出的深思熟虑的支持,包括提供和消费这些API(这已经被所有那些和我共事的Rails狂热者阐述过),我要赞美Rails,这样的事情并不常发生. 说真的,如果你从未使用过REST,但是使用过(或者更糟糕的,构建过)SOAP API,或仅仅开过一个WSDL并且将你报价

RESTful API的设计原则

最近一直在做公司的一个API平台的项目,前后大约有半年多了,中间穿插了好多其他的项目一起做的.上周经理要求写文档,我就重新打开项目开始检阅之前的代码,发现好多地方当初设计的并不合理,忽然就想到,一个好的API平台,应该怎么来设计呢?有哪些规范要遵守呢?面对自己的项目,感觉好多地方都要改,但是已经有人在用了,怎么办?全都要改动吗?所以就上网找解决方案,然后就发现一精品贴,现转载过来,以备不时查阅. 原文地址:http://www.cnblogs.com/moonz-wu/p/4211626.htm

使用Flask设计带认证token的RESTful API接口[翻译]

上一篇文章, 使用python的Flask实现一个RESTful API服务器端  简单地演示了Flask实的现的api服务器,里面提到了因为无状态的原则,没有session cookies,如果访问需要验证的接口,客户端请求必需每次都发送用户名和密码.通常在实际app应用中,并不会每次都将用户名和密码发送. 这篇里面就谈到了产生token的方法. 完整的例子的代码 可以在github:REST-auth 上找到.作者欢迎大家上去跟他讨论. 创建用户数据库 这个例子比较接近真实的项目,将会使用F

在Ubuntu上快速搭建基于Beego的RESTful API

最近在研究Go,打算基于Go做点Web API,于是经过初步调研,打算用Beego这个框架,然后再结合其中提供的ORM以及Swagger的集成,可以快速搭建一个RESTful API的网站. 下面是具体做法: 1. 在Ubuntu中安装Go 1.8 默认Ubuntu apt-get提供的是Go 1.6,而我们要用最新的Go 1.8需要执行以下操作: 1.1 添加apt-get源并刷新 $ sudo add-apt-repository ppa:gophers/archive $ sudo apt

好RESTful API的设计原则

说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间,如有人愿意转载请注明出处,谢谢^_^ Principles of good RESTful API Design 好RESTful API的设计原则 Good API design is hard! An API represents a contract between you and those who Consume your da