目前的认证方案是:生成密钥时记录生成时间,有效期设为30秒,并将密钥存储于本地。为了防止滥用,存储端核销密钥,必须在生成有效期结束后方可进行。这种方法有很多弊端,其一是在一定时间内帖子无法保存,二是网站端必须存储已生成密钥的记录。
今天想了一下,其实这些问题的核心就是,需要每次生成一个独特、无法伪造的密钥,且密钥只可使用一次。于是联想到数据库的uniqueID,为何不能在图片API程序也用上呢?
于是我在网站端建立一个uniqueID文件,里面记录调用次数递增值,在存储端记录同样的ID。每次生成密钥时,根据uniqueID的值进行生成,存储端验证后将其计数+1。这样旧的uniqueID会出现认证失败,防止了滥用的情况。
这么做的话无需在网站端存储任何内容,核销的话直接生成新指令即可。至于存储端密钥,如果认证成功需要保存的话,可以直接写入PHPtmp,长期不使用的密钥也可以被系统自动清理,一举两得!