oAuth协议万能三步曲

三部曲1.  default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Newtonsoft.Json.Linq;


namespace AppDemo
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            switch (Request["s"])
            {
                case "kaixin":
                    GetUserKaixin();
                    break;


                case "qq":
                    GetUserQQ();
                    break;


                case "sina":
                    GetUserSina();
                    break;
            }
        }


        protected void btnKaixin_Click(object sender, EventArgs e)
        {
            Response.Redirect("Login.aspx?t=kaixin");
        }


        protected void btnQQ_Click(object sender, EventArgs e)
        {
            Response.Redirect("Login.aspx?t=qq");
        }


        protected void btnLoginSina_Click(object sender, EventArgs e)
        {
            Response.Redirect("Login.aspx?t=sina");
        }


        protected void btnRenren_Click(object sender, EventArgs e)
        {
            Response.Redirect("Login.aspx?t=renren");
        }


        protected void GetUserKaixin()
        {
            HttpData http = new HttpData();
            string access_token = Session["access_token"].ToString();
            string url = string.Format("https://api.kaixin001.com/users/me.json?access_token={0}", access_token);
            string responseData = http.WebRequest("get", url, string.Empty);
            Response.Write("Kaixin");
            Response.Write(responseData);
        }


        protected void GetUserQQ()
        {
            HttpData http = new HttpData();
            string access_token = Session["access_token"].ToString();
            string uid = Session["uid"].ToString();
            string oauth_consumer_key = System.Configuration.ConfigurationManager.AppSettings["app_secret_qq"];
            string app_openid_qq = System.Configuration.ConfigurationManager.AppSettings["app_openid_qq"];


            string url = string.Format("  https://graph.qq.com/user/get_user_info?access_token={0}&oauth_consumer_key={1}&openid={2}&format=json ",
                access_token, oauth_consumer_key, app_openid_qq);
            string responseData = http.WebRequest("get", url, string.Empty);
            Response.Write("QQ");
            Response.Write(responseData);
        }


        protected void GetUserSina()
        {
            HttpData http = new HttpData();
            string access_token = Session["access_token"].ToString();
            string uid = Session["uid"].ToString();
            string url = string.Format("https://api.weibo.com/2/users/show.json?access_token={0}&uid={1}",
                                            access_token,uid);
            string responseData = http.WebRequest("get", url, string.Empty);
            Response.Write("Sina");
            Response.Write(responseData);
        }
    }
}
// HttpData.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;

namespace AppDemo
{
    public class HttpData
    {
        public string WebRequest(string method, string url, string postData)
        {
            HttpWebRequest webRequest = null;
            StreamWriter requestWriter = null;
            string responseData = "";

            webRequest = System.Net.WebRequest.Create(url) as HttpWebRequest;
            webRequest.KeepAlive = false;
            webRequest.Method = method.ToString();
            webRequest.ServicePoint.Expect100Continue = false;

            if (method == "post")
            {
                webRequest.ContentType = "application/x-www-form-urlencoded";
                requestWriter = new StreamWriter(webRequest.GetRequestStream());
                try
                {
                    requestWriter.Write(postData);
                }
                catch
                {
                    throw;
                }
                finally
                {
                    requestWriter.Close();
                    requestWriter = null;
                }
            }

            responseData = _WebResponseGet(webRequest);

            webRequest = null;

            return responseData;

        }

        public string _WebResponseGet(HttpWebRequest webRequest)
        {
            StreamReader responseReader = null;
            string responseData = "";
            try
            {
                var response = webRequest.GetResponse();
                responseReader = new StreamReader(response.GetResponseStream());
                responseData = responseReader.ReadToEnd();
            }
            catch (WebException e)
            {
                WebResponse error = e.Response;
                if (error != null)
                {
                    responseReader = new StreamReader(error.GetResponseStream());
                    responseData = responseReader.ReadToEnd();
                }
            }
            finally
            {
                if (responseReader != null)
                {
                    responseReader.Close();
                }
                responseReader = null;
            }

            return responseData;
        }
    }
}


//loginaspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AppDemo
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            switch (Request["t"])
            {
                case "kaixin":
                    KaixinLogin();
                    break;
                case "qq":
                    QQLogin();
                    break;
                case "sina":
                    SinaLogin();
                    break;
                case "renren":
                    RenrenLogin();
                    break;
            }
        }

        protected void RenrenLogin()
        {
            string client_id = System.Configuration.ConfigurationManager.AppSettings["app_key_renren"];
            string response_type = "code";
            string redirect_uri = "http://127.0.0.1:17509/callback.aspx?s=renren";
            string url = string.Format("https://graph.renren.com/oauth/authorize?client_id={0}&redirect_uri={1}&response_type={2}", client_id, redirect_uri, response_type);
            Response.Redirect(url);
        }

        protected void KaixinLogin()
        {
            string client_id = System.Configuration.ConfigurationManager.AppSettings["app_key_kaixin"];
            string response_type = "code";
            string redirect_uri = "http://127.0.0.1:17509/callback.aspx?s=kaixin";
            string url = string.Format("http://api.kaixin001.com/oauth2/authorize?response_type={0}&client_id={1}&redirect_uri={2}&scope=basic&display=popup",
                response_type, client_id, redirect_uri);
            Response.Redirect(url);
        }

        protected void QQLogin()
        {
            string client_id = System.Configuration.ConfigurationManager.AppSettings["app_key_qq"];
            string response_type = "code";
            string redirect_uri = "http://127.0.0.1:17509/callback.aspx?s=qq";
            string url = string.Format("https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id={0}&redirect_uri={1}&response_type={2}", client_id, redirect_uri, response_type);
            Response.Redirect(url);
        }

        protected void SinaLogin()
        {
            string client_id = System.Configuration.ConfigurationManager.AppSettings["app_key"];
            string response_type = "code";
            string redirect_uri = "http://localhost:17509/callback.aspx?s=sina";
            string url = string.Format("https://api.weibo.com/oauth2/authorize?client_id={0}&redirect_uri={1}&response_type={2}", client_id, redirect_uri, response_type);
            Response.Redirect(url);
        }
    }
}

// callback.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Specialized;
using Newtonsoft.Json.Linq;

namespace AppDemo
{
    public partial class CallBack : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            switch (Request["s"])
            {
                case "kaixin":
                    GetKaixinToken();
                    break;

                case "qq":
                    GetQQToken();
                    break;

                case "sina":
                    GetSinaToken();
                    break;

                case "renren":
                    GetRenRenToken();
                    break;
            }
        }


        protected void GetKaixinToken()
        {
            if (Request["code"] != null)
            {
                string client_id = System.Configuration.ConfigurationManager.AppSettings["app_key_kaixin"];
                string client_secret = System.Configuration.ConfigurationManager.AppSettings["app_secret_kaixin"];
                string grant_type = "authorization_code";
                string code = Request["code"].ToString();
                string redirect_uri = "http://127.0.0.1:17509/callback.aspx?s=kaixin";

                string url = "https://api.kaixin001.com/oauth2/access_token";
                string postData = string.Format("grant_type={2}&code={3}&client_id={0}&client_secret={1}&redirect_uri={4}", client_id, client_secret, grant_type, code, redirect_uri);
                HttpData http = new HttpData();
                string responseData = http.WebRequest("post", url, postData);
                OathTokenKaixin token = JsonHelper.ParseFormJson<OathTokenKaixin>(responseData);
                Session["access_token"] = token.access_token;
                //Session["uid"] = token.uid;
                Response.Redirect("Default.aspx?s=" + Request["s"]);
            }
        }

        protected void GetQQToken()
        {
            if (Request["code"] != null)
            {
                string client_id = System.Configuration.ConfigurationManager.AppSettings["app_key_qq"];
                string client_secret = System.Configuration.ConfigurationManager.AppSettings["app_secret_qq"];
                string grant_type = "authorization_code";
                string code = Request["code"].ToString();
                string redirect_uri = "http://127.0.0.1:17509/callback.aspx?s=qq";

                string url = "https://open.t.qq.com/cgi-bin/oauth2/access_token";
                string postData = string.Format("client_id={0}&client_secret={1}&grant_type={2}&code={3}&redirect_uri={4}", client_id, client_secret, grant_type, code, redirect_uri);
                HttpData http = new HttpData();
                string responseData = http.WebRequest("post", url, postData);
                NameValueCollection qs = HttpUtility.ParseQueryString(responseData);
                Session["access_token"] = qs["access_token"];
                Session["name"] = qs["name"];
                Session["uid"] = Request["openid"];
                Response.Redirect("Default.aspx?s=" + Request["s"]);
            }
        }

        protected void GetSinaToken()
        {
            if (Request["code"] != null)
            {
                string client_id = System.Configuration.ConfigurationManager.AppSettings["app_key"];
                string client_secret = System.Configuration.ConfigurationManager.AppSettings["app_secret"];
                string grant_type = "authorization_code";
                string code = Request["code"].ToString();
                string redirect_uri = "http://localhost:17509/callback.aspx?s=sina";

                string url = "https://api.weibo.com/oauth2/access_token";
                string postData = string.Format("client_id={0}&client_secret={1}&grant_type={2}&code={3}&redirect_uri={4}", client_id, client_secret, grant_type, code, redirect_uri);
                HttpData http = new HttpData();
                string responseData = http.WebRequest("post", url, postData);
                OathToken token = JsonHelper.ParseFormJson<OathToken>(responseData);
                Session["access_token"] = token.access_token;
                Session["uid"] = token.uid;
                Response.Redirect("Default.aspx?s="+Request["s"]);
            }
        }

        protected void GetRenRenToken()
        {
            if (Request["code"] != null)
            {
                string client_id = System.Configuration.ConfigurationManager.AppSettings["app_key_renren"];
                string client_secret = System.Configuration.ConfigurationManager.AppSettings["app_secret_renren"];
                string grant_type = "authorization_code";
                string code = Request["code"].ToString();
                string redirect_uri = "http://127.0.0.1:17509/callback.aspx?s=renren";
                string url = "https://graph.renren.com/oauth/token";
                string postData = string.Format("grant_type={2}&client_id={0}&redirect_uri={4}&client_secret={1}&code={3}", client_id, client_secret, grant_type, code, redirect_uri);
                HttpData http = new HttpData();
                string responseData = http.WebRequest("post", url, postData);

                var decodedJSON = JObject.Parse(responseData);
                Session["uid"] = decodedJSON["user"]["id"];
                Session["uname"] = decodedJSON["user"]["name"];
                Session["access_token"] =decodedJSON["access_token"];
                Response.Redirect("Default.aspx?s=" + Request["s"]);
            }
        }


        public class OathToken
        {
            public string access_token { get; set; }
            public string expires_in { get; set; }
            public string remind_in { get; set; }
            public string uid { get; set; }
        }

        public class OathTokenKaixin
        {
            public string access_token { get; set; }
            public string expires_in { get; set; }
            public string refresh_token { get; set; }
            public string scope { get; set; }
        }

        public class OathTokenRenren
        {
            public string access_token { get; set; }
            public string expires_in { get; set; }
            public string refresh_token { get; set; }
            public string scope { get; set; }
        }

        //var json = request.HttpGet(getTokensURL);
        //var decodedJSON = JObject.Parse(json);
        //var error = decodedJSON["error"];

    }
}


// 引用 using Newtonsoft.Json.Linq;

 string responseData = http.WebRequest("post", url, postData);

                var decodedJSON = JObject.Parse(responseData);
                Session["uid"] = decodedJSON["user"]["id"];
                Session["uname"] = decodedJSON["user"]["name"];
                Session["access_token"] =decodedJSON["access_token"];

//web.config

 <appSettings>
    <add key="app_key" value="2888466971"/>
    <add key="app_secret" value="cb79c5fff879dad8c427cXXXXXXXXXX"/>

    <add key="app_key_qq" value="801194852"/>
    <add key="app_secret_qq" value="390bc8a51f3f94bc091XXXXXXXXXX"/>
	<add key="app_openid_qq" value=""/>
	  
    <add key="app_key_kaixin" value="91860610107018e7ff8XXXXXXXX"/>
    <add key="app_secret_kaixin" value="2b3de87b91ea6f7d68522cb744a487f4"/>

	  <add key="app_key_renren" value="e6ef82b1233e4b71XXXXXXXXX"/>
	  <add key="app_secret_renren" value="3d4e8de4fde1411fa693cea0ea0ab691"/>
  </appSettings>





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值