QQ互联OAuth2.0 .NET SDK 宣布以及网站QQ登陆示例代码

OAuth
OAuth(开放授权)是一个开花标准,允许用户授权第三方网站访问他们存储在此外的劳动提供者上的消息,而不需要将用户名和密码提供给第三方网站或分享他们数据的拥有内容。

QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户音讯,动态同步,照片,日志,分享等),为了保障用户数量的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。

QQ登录OAuth2.0利用OAuth2.0标准协议来进展用户身份验证和得到用户授权,相对于事先的OAuth1.0协议,其认证流程更简短和白山。具体参考文档
:【QQ登录】OAuth2.0开支文档

QQ互联网站已经提供了PHP,JS,Android和iOS的SDK,缺乏.NET版本的SDK,中秋节假日期间利用一些悠然时间封装了一个有所完全意义的.NET
SDK,后续将打包一个遥相呼应的Windows
Phone的SDK,并开源放在http://opensns.codeplex.com
,专门搭建了一个示范网站http://www.win8charm.com/
和MSDN风格的在线扶助网站http://help.win8charm.com/
。先天这篇作品重要介绍使用.NET SDK实施QQ登陆效用。

从这里http://opensns.codeplex.com/
下载最新版本的SDK,最新版本是Beta,
完成SDK的包裹,希望我们使用协助测试,SDK倚重于牛顿soft.Json和RestSharp六个程序集,具体可以参见使用RestSharp
库消费Restful
Service

重假使五个类QzoneContext(QQ登陆的上下文数据)  和 QOpenClient
(QQ互联API入口),其他类首如果模型,配置类。

1、你得去http://connect.qq.com/
申请一个账号,会拿走一个APP ID和App
Key,这多个东东会在变更请求的时候用到。你的去填一些资料,还要提交一些材料审核。

在部署文件web.config参加QQ登陆所急需的一部分布局参数,如下图所示:

<configuration>
  <configSections>
    <sectionGroup
name=”QQSectionGroup”>
      <section name=”QzoneSection”
type=”System.Configuration.NameValueSectionHandler,System,
Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089″
/>
    </sectionGroup>
  </configSections>
   <QQSectionGroup>
    <QzoneSection>
      <add key=”AppKey” value=””
/>
      <add key=”AppSecret” value=””
/>
      <add key=”CallBackURI” value=””
/>
      <add key=”AuthorizeURL”
value=”https://graph.qq.com/oauth2.0/authorize” />
    </QzoneSection>
  </QQSectionGroup>

AppKey是申请QQ登录成功后,分配给接纳的appid;AppSecret是申请QQ登录成功后,分配给网站的appkey;CallBackURI是QQ登陆成功后的回调地址:AuthorizeURL是QQ互联的OAth2认证地址:

2、在项目中添加多少个引用牛顿(Newton)soft.Json.dll、Rest夏普.dll和
QConnectSDK.dll,
在页面上停放按钮,打开qq登录的页面,然后登录成功未来回调您的网站的页面。此时只要用户在您的网站有账号,这就可以绑定现有账号,或者新登记一个账号。倘使您是新建站,也得以完全使用qq登录来作为用户类别。

下面上代码:

        /// <summary>
        /// QQ登陆页面
        /// </summary>

       [HttpGet]
       public ActionResult Login(string
returnUrl)
       {
           this.Session[RETURNURL] =
returnUrl;
           var context = new
QzoneContext();
           string state =
Guid.NewGuid().ToString().Replace(“-“, “”);
           Session[“requeststate”] =
state;
           string scope =
“get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr”;

           var authenticationUrl =
context.GetAuthorizationUrl(state, scope);
           return new
RedirectResult(authenticationUrl);

       }   

        /// <summary>
        /// 回调页面
        /// </summary>

       public ActionResult
QQConnect(LoginModel model)
       {
           if (Request.Params[“code”] !=
null)
           {
               QOpenClient qzone =
null;

               var verifier =
Request.Params[“code”];
               var state =
Request.Params[“state”];
               string requestState =
Session[“requeststate”].ToString();

               if (state == requestState)

               {
                   qzone = new
QOpenClient(verifier, state);
                   var currentUser =
qzone.GetCurrentUser();
                   if
(this.Session[“QzoneOauth”] == null)
                   {
                      
this.Session[“QzoneOauth”] = qzone;
                   }
                   var friendlyName =
currentUser.Nickname;

                   var isPersistentCookie
= true;
                  
SetAuthCookie(qzone.OAuthToken.OpenId, isPersistentCookie,
friendlyName);

                   return
Redirect(Url.Action(“Index”, “Home”));
               }

           }
           return View();
       }

上边的代码是ASP.NET
MVC的,项目示范运行在http://www.win8charm.com/ ,下边贴个ASP.NET
WebForm的代码示例:

QQ登陆页面

namespace OpenConnect.WebSample.Account

{
    public partial class LoginToQQ :
System.Web.UI.Page
    {
        protected void Page_Load(object
sender, EventArgs e)
        {
            GetRequestToken();
        }

        private void GetRequestToken()

        {
            var context = new
QzoneContext();
            string state =
Guid.NewGuid().ToString().Replace(“-“, “”);
            string scope =
“get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr”;

            var authenticationUrl =
context.GetAuthorizationUrl(state,scope);
            //request token, request token
secret 需要保存起来
           
//在demo演示中,直接保存在全局变量中.真实意况需要网站自己处理
            Session[“requeststate”] =
state;          
           
Response.Redirect(authenticationUrl);

        }
    }
}

 

回调页面

namespace OpenConnect.WebSample.Account

{
    public partial class QQCallback :
System.Web.UI.Page
    {
        protected void Page_Load(object
sender, EventArgs e)
        {
            if (Request.Params[“code”]
!= null)
            {
                QOpenClient qzone = null;

                User currentUser =
null;

                var verifier =
Request.Params[“code”];
                string state =
Session[“requeststate”].ToString();
                qzone = new
QOpenClient(verifier, state);
                currentUser =
qzone.GetCurrentUser();
                if (null != currentUser)

                {
                    this.result.Text =
“成功登陆”;
                    this.Nickname.Text =
currentUser.Nickname;
                   
this.Figureurl.ImageUrl = currentUser.Figureurl;
                }
                Session[“QzoneOauth”] =
qzone;

            }

     }

}

此间说明一下用到QQ互联登陆是收获不到用户的QQ号的,只会收获到用户的OpenId,OpenID和QQ号是各类对应提到。

当地测试
  • 前提准备,了然本地Host文件的成效
  1. 找到C:\WINDOWS\system32\drivers\etc\hosts那多少个文件
  2. 用文件格局打开
  3. 追加一行:127.0.0.1
    www.domain.com
  4. 启航本地服务器
  5. 开行浏览器访问
    http://www.domain.com/
其他

相关文章