OAuth认证中的UrlEncode for C# - [C#研习]

关于OAuth就不介绍了,上oauth.net一看就可以了解,等有空再总结下自己对于OAuth认证过程的理解,在做OAuth应用时遇到一下很纠结的问题,已经取得了access_token,因为都是通过GET方式去获取数据,没有遇到什么大的问题,但在Update status时总是遇到400错误,这种情况下一般问题都出在请求的url和data不一致,也就是签名的时候出了问题。

除了下面基本的字母与数字,其他的符号包括非英文语言都要进行UrlEncode才能正确让Server接收并Decode:

在官方提供的oAuthBase代码中,并不能很好的解析其他字符,特别是如果直接调用HttpUtility.UrlEncode()时就会出现问题,因为这个UrlEncode函数得到的转义字符串都是小写字母,而在OAuth认证中,我们需要先通过GenerateSignatureBase生成basestring,而basestring需要进行UrlEncode,basestring接着被拿去签名,这时大小写区分是很重要的,因为它直接决定你的签名是否正确。

于是,参考了原来的代码和网上的一些资料,修改UrlEncode函数如下:

然后在POST的Data中统一使用上面的那个UrlEncode函数即可正确处理字符转义的问题,包括其他符号,中文,日文等:

 

问题解决后,不知道这个是不是个案,其实只要熟悉OAuth认证过程的话应该就能根据自己的需要去修改达到目的的。

 

2011-10-23 19:35补充OAuth认证简略说明:

虽然可以去参考Google的OAuth介绍,但感觉腾讯开放平台上的一份说明介绍得很不错,首先看OAuth认证流程图(版权归其所有):

 

从上图就可以对OAuth有一个比较感性的认识,这里特别要注意的是签名这里,所有TOKEN请求和受保护的资源请求必须被签名,Server会根据签名来判断请求的合法性.签名算法使用Signature Base String和密钥(Secret)生成签名,参数oauth_signature用于指定签名,如下图:

可以看到上图在对BaseString签名时大小写区分都会影响到最终的签名效果,所以就有本文的自定义UrlEncode方法for OAuth。

 

posted @ 2011-10-23 10:49  卿之  阅读(2006)  评论(0编辑  收藏  举报
无觅相关文章插件,快速提升流量