OAuth2通用组件源码,OAuth2.0几乎成了当今第三方平台的一个标准中的标准,其中微信的回调地址是在公众平台设置的,appkey和appsecret啥的是需要改的,您懂的。
支持新浪微博、QQ、淘宝
软件简介
OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限。同时为Web应用,桌面应用和手机,和起居室设备分享专门的认证流程。
OAuth2.0几乎成了当今第三方平台的一个标准中的标准(我不知道几年后会出3.0),那既然是一个标准,为什么就不能用一个相对标准的类库或项目来实现呢?翻遍整个china的开源项目,就别说是C#了,连java、php都没有这样的现成项目,那老朽就卖一把老,继续为各位献上一点微薄之力吧。
由于时间关系,第一版我就做了6个接口的对接,其中微信的回调地址是在公众平台设置的,不支持传参,注意哦
整个项目只有register_third.aspx是需要跟您的会员系统对接,其他都不需要修改~~哦,忘了说,appkey和appsecret啥的是需要改的,您懂的。
OAuth2组件升级的重点
1:引入了淘宝登陆(不是搞淘客站的,淘小二以没备案为由,不给过,鄙视下);
2:优化Tool类的GetJosnValue,更加适应不同不规范的Json截取相应的值;
3:搭配了最新版本的CYQ.Data V5数据组件来操作文本数据库。聽
4:源码中增加了Demo示例。
组件升级的简单介绍
1:登陆的样式变了下,变成这样了:
以前是这样的:
2:代码新增加淘宝支持:TaoBaoAuth.cs
代码如下:
using聽System;
using聽System.Collections.Generic;
using聽System.Text;
namespace聽OAuth2
{
聽聽聽聽class聽TaoBaoAuth聽:聽OAuth2Base
聽聽聽聽{
聽聽聽聽聽聽聽聽internal聽override聽OAuthServer聽server
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽get
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return聽OAuthServer.TaoBao;
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽internal聽override聽string聽ImgUrl
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽get
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return聽"聽淘宝";
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽internal聽override聽string聽OAuthUrl
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽get
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return聽"https://oauth.taobao.com/authorize?response_type=code&client_id={0}&redirect_uri={1}&state={2}";
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽internal聽override聽string聽TokenUrl
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽get
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return聽"https://oauth.taobao.com/token";
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽public聽override聽bool聽Authorize()
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽if聽(!string.IsNullOrEmpty(code))
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽string聽result聽=聽GetToken("POST");//一次性返回数据。
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽//分解result;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if聽(!string.IsNullOrEmpty(result))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽try
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽token聽=聽Tool.GetJosnValue(result,聽"access_token");
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if聽(!string.IsNullOrEmpty(token))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽double聽d聽=聽0;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if聽(double.TryParse(Tool.GetJosnValue(result,聽"expires_in"),聽out聽d))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽expiresTime聽=聽DateTime.Now.AddSeconds(d);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽//读取OpenID
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽openID聽=聽Tool.GetJosnValue(result,聽"taobao_user_id");
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽nickName聽=聽Tool.GetJosnValue(result,聽"taobao_user_nick");
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return聽true;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽CYQ.Data.Log.WriteLogToTxt("QQOAuth.Authorize():"聽+聽result);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽catch聽(Exception聽err)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽CYQ.Data.Log.WriteLogToTxt(err);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽return聽false;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
}
其中,如下图:
异常部分。。一看就知道这类是从QQAuth类复制过来改的。。。这个忘了改了。。sorry..-_-...。
3:Demo部分的项目截图:
其中小图片的目录,藏了好几层,主要是因为秋色园的样式里直接过渡过来的,具体和代码里有路径对应。
下载仅供下载体验和测试学习,不得商用和正当使用。
下载体验