博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
access key 笔记
阅读量:6174 次
发布时间:2019-06-21

本文共 1631 字,大约阅读时间需要 5 分钟。

用户认证

后台服务要提供公共接口给用户调用,必须要提供认证机制,一旦用户认证通过,才让用户调用API。对于次,可以通过(access_key,secret_access_key)来认证。

这个(access_key,secret_access_key)是成对存在的。用户要调用API必须要申请这样的一对数据。一般工作流程是:

  1. 用户在前端申请access key
  2. 服务器在后台生成(access_key,secret_access_key),然后存进数据库,然后把这对数据返回给用户

用户的调用API流程是:

  1. 通过secret_access_key来给请求参数签名,并且把签名附加到请求里,然后发请求给服务器
  2. 服务器通过请求里的参数access_key来查询数据库里的secret_access_key,然后用secret_access_key计算请求参数的签名是否跟请求里的签名一致,一致则确认用户身份,不一致则拒绝访问。

签名

接下来介绍给参数签名的方法。如果请求参数如下:

{    'name': 'fami',    'address': 'pek'}

把access_key加进这个请求里:

{    'name': 'fami',    'address': 'pek',    'access_key': 'abc'}

将这些参数按key的字母升序排序,然后以key=value的形式表示,然后用&连接起来。效果如下:

access_key=abc&address=pek&name=fami

然后用以secret_access_key为key用sha256(或其他算法)对这个字符串进行签名,如果签名后得到`

signature = 'xxxxxxxx'

那么把这个签名添加到请求参数里,得到

{    'access_key': 'abc',    'name': 'fami',    'address': 'pek',    'signature': 'xxxxxxxx'}

最终把这个发给服务器,服务器根据参数里的access_key去查看secret_access_key,然后把参数里的signature字段取出来,用前面的签名方法来对剩下的参数进行签名,如果发现自己计算的签名跟请求参数里的签名一样,那么则通过认证。

安全问题

这里会有一个问题:如果这个(access_key,secret_access_key)被别人知道了,那么别人就会以我的身份去调用API了。确实会有这个问题,针对此,可以用以下的方法来减小影响。

  1. access key支持ip白名单,只有在白名单内的ip才可以调用API。
  2. access key支持设置有效期,也就是在有效时间内,该access key有效,过了这个有效期,就拒绝访问。
  3. access key支持修改状态,只有状态为可用的情况下,服务器才会接受。

用户使用API必然会担心安全问题。在此之外还可以做些类似定期提醒用户修改access key状态,或者定期删除access key。

题外话

微信公众号开发接口里面,是通过access_token调用微信的接口的。access_token生成方式如下:

接口调用请求说明

https请求方式: GEThttps://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

通过传appid, appsecret给微信api后台,后台就会返回access_token,这个access_token是有有效期的,有点类似浏览器登录。

正常情况下,微信会返回下述JSON数据:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

不过个人觉得传appsecret的方式不太优雅。

转载地址:http://maqba.baihongyu.com/

你可能感兴趣的文章
iptables防火墙的使用
查看>>
浅谈js中的继承
查看>>
软件工程 之 画扇面
查看>>
zabbix mysql数据库迁移方案
查看>>
VirtualBox虚拟机网络设置(四种方式)
查看>>
[C# 基础知识系列]专题十六:Linq介绍
查看>>
Cisco 胖瘦AP转换
查看>>
jQuery学习
查看>>
MYSQL 锁:metadata lock
查看>>
3.5 数组
查看>>
XAlign:用于代码对齐的Xcode插件
查看>>
sqlserver表分区的相关总结
查看>>
exchange 2010 专题- 个人存档
查看>>
java
查看>>
Tomcat集群Cluster实现原理
查看>>
人人都应当控制的一些电脑操作技能
查看>>
百度echarts自定义主题使用
查看>>
ASP.NET MVC3中给DropDownList添加默认选项
查看>>
Mac OS开启关闭root用户,禁用“其他”登录
查看>>
SQL Server为啥使用了这么多内存?
查看>>