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。
@:卿之 → http://www.cnblogs.com/wpdev
©:博文是本人当时的学习笔记及知识整理,由于自身局限错误在所难免,敬请斧正.
©:本文版权属于博客园和本人,版权基于署名 2.5 中国大陆许可协议发布,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接和署名卿之(包含链接),不得删节,否则保留追究法律责任的权利。