网站api接口认证方法
很久没写过技术性的文章了,其实也谈不上技术,只是一些些心得。
最近在写一个网站的接口,为了给聘博网做外呼用,做成接口是因为可能不止聘博网会用,计划做成一种服务,至于做什么就不详细说了。很多Web2.0网站都提供了Api接口,有些是每一次操作都是发送帐号和密码到服务器验证,有些是第一次是到服务器验证,得到一串字符串,根据这串字符串进行验证。
我的方法是采用第二种,首先分配一个api key和api id给网站A,api key是一串md5加密的字符串,api id是数字是用来查找api key的,每个网站都不相同,每次发送请求时先签名,签名的方法和支付宝得差不多,如:
要发送的参数是a=1&c=3&b=2 签名使用升序进行排序,排序后是a=1&b=1&c=1然后用api key进行md5加密生成md5加密字符串如a79fa25b63a27ef459bf7c1f72b7ac32,然后用作为一个参数请求最后生成下面的URL http://www.xx.com/?a=1&b=1&c=1&api_id=1&sign=a79fa25b63a27ef459bf7c1f72b7ac32
上面就是签名的生成方法,用户登录时得到第一次得到的md5验证字符串,我叫它token,还有token的id,都把它存到用户的数据库中,以后每次请求需要认证时,每次签名都用token在加密一次生成签名,发送请求时加上token id 即http://www.xx.com/?a=1&b=1&c=1&&api_id=1&token_id=1&sign=90045d980fcc48a35c3aab0e042dfa77,服务器端根据token_id查找token,根据api_id查找对应的api_key,然后再用同样的方法md5加密得到签名和发送过来的签名对比就知道数据有没有被改动,因为在认证过程中apikey和token不会被公开所以地址不会被伪造。如果要更安全,网站A可以做一个验证地址,服务器到客户端验证一次是否数据在网站A发送,就可以知道是否通过请求。
接口服务器可以保存token可以用xml,数据库等存放起来,而网站A则把第一次认证得到的token信息保存到用户表中。