最近在做的两个项目,都需要使用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的访问控制方法的更多相关文章

  1. 转:一个Restful Api的访问控制方法(简单版)

    最近在做的两个项目,都需要使用Restful Api,接口的安全性和访问控制便成为一个问题,看了一下别家的API访问控制办法. 新浪的API访问控制使用的是AccessToken,有两种方式来使用该A ...

  2. 使用python的Flask实现一个RESTful API服务器端

    使用python的Flask实现一个RESTful API服务器端 最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文 ...

  3. Postman如何通过xmysql工具的Restful API 接口访问MySQL

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 有时候用 Postman 接口测试需要获取MySQL的查询结果做接口输出的校验,这里介绍下 Postman 通过 R ...

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

    最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务 ...

  5. 实现一个 RESTful API 服务器

    RESTful 是目前最为流行的一种互联网软件结构.因为它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. 什么是 REST REST(REpresentational Stat ...

  6. 转:使用python的Flask实现一个RESTful API服务器端

    提示:可以学习一下flask框架中对于密码进行校验的部分.封装了太多操作. 最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了 ...

  7. 使用 SpringBoot 构建一个RESTful API

    目录 背景 创建 SpringBoot 项目/模块 SpringBoot pom.xml api pom.xml 创建 RESTful API 应用 @SpringBootApplication @C ...

  8. 用 Go 快速开发一个 RESTful API 服务

    何时使用单体 RESTful 服务 对于很多初创公司来说,业务的早期我们更应该关注于业务价值的交付,而单体服务具有架构简单,部署简单,开发成本低等优点,可以帮助我们快速实现产品需求.我们在使用单体服务 ...

  9. 第一个RESTful API

    一个简单的测试 /** * Created by M.C on 2017/9/8. */ var superagent = require('superagent'); var expect = re ...

随机推荐

  1. 命令提示符CMD远程连接Mysql学习笔记

    我想要用Cmd可以像SecureCRT一样远程连接数据库,查询数据,因为用cmd的话可以用批处理,方便脚本调用 第一步:直接使用命令 mysql –h ip –u user –p,本地运行了该命令提示 ...

  2. android 集成百度地图

    一.下载百度地图为我们提供的所有DEMO. 在这里边我选的是一键下载. 二.下载后有两个项目一个是用于eclipse.另一个是android studio.我选的是android studio. 我用 ...

  3. Android应用程序窗口(Activity)的窗口对象(Window) 的创建过程分析

    每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口. 每一个Activity组件都有一个关联的ContextImp ...

  4. Codeforces 4D Mysterious Present

    http://codeforces.com/contest/4/problem/D 题目大意: 给出n个信封,这n个信封有长和宽,给出卡片的尺寸,求取能够装入卡片的最长的序列,序列满足后一个的长和宽一 ...

  5. 简单工厂模式 - OK

    简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 使用场景: 工厂类负责创建的对象比较少: 客户只知道传 ...

  6. 如何查找到文件以后,带目录一起拷贝到新的目录? cp --parents source destination

    如何查找到文件以后,带目录一起拷贝到新的目录? cp --parents  source  destination

  7. VMWare 虚拟机

    http://pan.baidu.com/share/link?shareid=5873&uk=941708466 VMWare是虚拟化解决方案厂商,旗下有多款虚拟机软件产品,其中最知名的要数 ...

  8. 浅谈JVM内存区域划分

    好吧,虽说真的有看过<深入分析Java Web技术内幕>一书,但当时看的时候还是一知半解,稀里糊涂的看完了.本来是打算暑假拿起来再看一遍的,但是早两天一个阿里学长给我做了个小面试,让我颇受 ...

  9. Jsensation | 氪加

    Jsensation | 氪加 www.jsensation.com

  10. 【转】10分钟了解设计模式(C#)

    10分钟了解设计模式(C#) 最近把<大话设计模式>重温了下(看完序才知道原来作者是也是博客园园友,这本书的最早博客版本在这里).体会最深的就是面向接口编程的重要性,如何在自己的项目中进行 ...