基于URL生成API Key方法

转载地址:http://blog.sina.com.cn/s/blog_616acf520100kk3g.html


今天师兄让我设计地图API Key的实现方法,看了一下google、百度地图的API,大概整理一下流程,因为在网上很难查到相关的资料,菜鸟拿出来和大家分享一下。

1.         实现的前提

       API Key与用户的帐户关联。

        为了获取API调用者的信息,要确保API调用者在拥有了新浪账户之后才能够申请API Key

       API Key要映射到一个明确的域名与目录,这也就是说,如果一个API调用者想访问API,它要具备两个条件:

       在进行服务请求的时候,API调用者要指定一个正确的API Key做为请求参数

        调用者要在与API Key匹配的域名与目录中,假设这个Key是通过URLhttp://map.sina.com.cn/samples(包括了域名map.sina.com.cn与目录samples)来申请的。哪么,所有的来自这个URLAPI申请都能被通过,而来自其它URL的申请就不能用这个Key

2.         实现方法

要实现这个技术,首先你要生成并分发这些API Key,之后是你要验证通过这些Key来进行的API调用请求,下面我们来具体分析这两个模型:

         加密模式

        通过一个Hash函数来生成一个API Key并分发出去,这里可以采用phpMhash实现,这个方法是一个单向的方法,只能通过一些数据来生成Key,而不能通过这个Key再还原出来这个数据。在这里,输入的数据就是URL

        生成key时加一个TOKEN,这样更加不好逆转。

         验证模型

        根据一个主机的调用请求HTTP referer+TOKENHTTP referer中含有发出请求的源URL)信息再生成一个Key,然后比较这个Key与用户有请求时写到参数中的哪个Key,如果验证匹配,哪么这个主机的请求将被响应。

 


基于URL生成API Key方法_第1张图片 

 

3.         局限

API Key来控制访问有一些局限,不过它能去除大量的非法API调用。

         HTTP referer很容易被伪造

         虽然从key中很难还原出原来数据(也就是URL),但也不是不可能的。就算我们用了MD5算法,并在Key中加入了TOKEN来增加还原的难度。

4.         优势

通过API KeyURL之间对应关系来限制你的API只能由某个特定的域名也目录来调用,也就是说,你可以指定哪个主机可以访问你的API。除此之外,这个技术还可以帮助你确定谁在用你的API,这样你就可以统计,在某段时间内,你的服务被调用多少次。

5.         数据模型

        存在的问题?

       是否加上限制机制?即,针对调用者的使用权限加以控制,在验证API Key的同时,验证KEY值是否过期,是否被强制锁定,是否需要续费等,这样的优势是对使用者的行为时可控的,劣势是每次验证都要访问数据库,降低验证的效率,增强数据库的压力。


你可能感兴趣的:(基于URL生成API Key方法)