Tag: API

  • Thoughs on goRBAC

    Code refactoring is not an easy job, but it has to be done in most of the times. I just completed the lightweight role based access control library: goRBAC’s refactoring. There are some feedbacks and questions about the design and usage. I think it would be better writing something to share some design ideas and practice principles which will make things easier.

    rbac

    The master branch of current goRBAC’s source code is intended to be Version 2. While the previous version has been tagged as Version 1 with the v1.dev branch on Github. And this article will only discuss Version 2 (the master branch).

    (more…)

  • 腾讯微博开放平台的PECL的OAuth封装

    这是腾讯微博开放平台使用 PECL OAuth 扩展例子,我在“微博擂台”中已经使用的。现在抽取出来作为一个独立的库。

    Token 的存储提供了 Session 和 Memcache 两种方式。Session 方式是默认方式,也就是说不进行任何设置默认使用 Session 存储 OAuth 的 Token。

    如果想用后台进程,例如 Gearman 之类的异步调用腾讯的 API ,建议使用 Memcache。当然,也可以自己扩展存储接口,实现 Mysql 之类的存储方式。

    下载代码

  • 使用 PECL 的 OAuth 库访问 QQ 微博 API

    大势所趋,QQ 也在自家门上开了个小洞让诸位看客过过瘾。不过 API 文档不给力,疏漏多、讲得粗,没有 SDK,没有 Step by step,关键细节交代不清……幸而,摸索两日,总算是探得一个靠谱的办法——PECL 的 OAuth 库访问。

    特别记录于此,供众玩家观赏。
    (more…)

  • 使用 PECL 的 OAuth 访问腾讯微薄 API 的一点麻烦

    尝试用 PECL 的 OAuth 访问腾讯微薄,到 Access Token 那步总是有问题。 5% 的成功率。在 Request Token 的时候,也总有不成功的情况发生。

    捕捉到异常:“Invalid auth/bad request (got a 401, expected HTTP/1.1 20X or a redirect)”,服务器返回“Invalid / expired Token”。

    奇怪的是同样的代码,那 5% 的成功率是哪里来的。上 Q 一问,腾讯某大牛提示检查检查 nonce 或者 timestamp 是不是正确。于是乎,检查了一下 OAuth 的代码

    	if (soo->nonce) {
    		nonce = estrdup(soo->nonce);
    	} else {
    		struct timeval tv;
    		int sec, usec;
    		/* XXX maybe find a better way to generate a nonce... */
    		gettimeofday((struct timeval *) &tv, (struct timezone *) NULL);
    		sec = (int) tv.tv_sec;
    		usec = (int) (tv.tv_usec % 0x100000);
    		spprintf(&nonce, 0, "%ld%08x%05x%.8f", php_rand(TSRMLS_C), sec, usec, php_combined_lcg(TSRMLS_C) * 10);
    	}
    

    看到“spprintf(&nonce, 0, “%ld%08x%05x%.8f”, php_rand(TSRMLS_C), sec, usec, php_combined_lcg(TSRMLS_C) * 10);”了吗?!悲剧啊!

    现在明白腾讯文档上那句“随机串(32个字符长度)”是什么意思了,RFC 5849 完全没提 nonce 需要 32 字符长度。腾讯自己说自己复合 OAuth 1.0a 标准,然后在标准上搞出了小标准⋯⋯

    我比较懒,简单搞掂:

    $oauth->setNonce(md5(rand()));