无论如何把Consumer key和Consumer Secret存到客户端都是不安全,正确的做法还是放到服务器上。
阅读这篇文章前读者需要先了解OAuth。
OAuth授权方式对用户来说是较为安全的,而且OAuth 2.0修复了OAuth 1.0中的一些安全缺陷,变得更加安全了。
最近我刚好想做一个Chrome浏览器上的微博插件,提供微博的一些基本功能,例如消息提醒、查看更新等。在做这些之前我得先在我的Chrome扩展中加入微博OAuth 2.0的授权机制。于是我就想到了唯一一个支持微博OAuth 1.0认证方式的Chrome经典插件——Fawave,在阅读Chrome上的经典微博插件Fawave源码的过程中,发现它把App Key(Consumer Key)和Consumer Secret存储在了用户本地。这对用户来说没啥关系,但对应用开发者的似乎有些影响。比如遇到一个像我这样别有用心的人,一旦拿到key+secret+access_token(三者缺一不可哦),就可以拿着Fawave的名号去干一些坏事,比如骚扰用户等等。这样开发者所开发的应用就被无故抹黑了。所以OAuth授权最好还是要通过服务端来进行(Consumer Key和Consumer Secret应存放服务端)。
那么我们如何在用户授权后拿到access_token呢?很简单,只要把Chrome扩展内建支持的content_script注入到你的回调页面上,再通过该脚本直接获取url中的access_token就可以了。例如我的回调页面是http://mweibo.sinaapp.com/callback.php,那么在扩展中的manifest.json中加入:
{
"name": "My extension",
"content_scripts": [
{
"matches": ["http://mweibo.sinaapp.com/callback.php*"],
"js": ["get_access_token.js"]
}
]
}
在get_access_token.js中,通过:
var access_token = location.href.split('code=')[1];
来获取access_token,接着我们就可以在Chrome插件中拿着access_token直接请求微博接口了。





近期评论