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依赖于Newtonsoft.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、在项目中添加三个引用Newtonsoft.Json.dll、RestSharp.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/
其他
时间: 2024-08-06 00:25:23

QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码的相关文章

QQ互联Oauth2.0认证测试

我不太喜欢讲原理,喜欢按照应用流程一步步完成一个测试项目,然后掉过头来看原理. 如此. 首先,我们得建一个应用,这无可厚非. 来个网站应用吧! 填写基本信息时,有个网站地址,我们填写一个自己所维护的外部网站页面地址. 在HEAD标签里按照提示,嵌入验证代码,并加以验证. 回调地址填写相应的域名. 示例: 在新建的web项目里新加一个配置文件如下: app_ID = ******** app_KEY = ************************* redirect_URI = http:/

什么是“QQ登录OAuth2.0”

1. 什么是“QQ登录OAuth2.0 OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权.QQ登录OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于

第三方登录之QQ登录(二)——OAuth2.0处理流程介绍(以QQ登录为例)

为了让网站更快接入,腾讯提供了JS SDK的接入方案,具体点击这里或者点击这里进行查看. 不过也可以自己写代码,当然你需要了解QQ的OAuth2.0的处理流程(Web Server Flow). OAuth2.0的处理流程:点击这里查看官方Wiki. 1.授权:获取授权码Authorization Code 说明:第一步QQ必须得到要登录系统的授权信息,如果授权全成功,则会跳转到回调地址,同时授权码以参数形式,追加回调地址上. 当然还有一些其他参数,具体详情看官方介绍. 实例: https://

QQ登录整合/oauth2.0认证-02-跳转到QQ互联页

---------------------------目录---------------------------------- QQ登录整合/oauth2.0认证-01-申请appkey和appid ---------------------------正文---------------------------------- 在上一讲里面,主要是 要读者们 先准备一个 appid 和appkey,准备这个 可能需要一段时间审核,公司类型的可能稍微慢一点 其实 关键是 你能有一个可以绑定上域名的空

基于OAuth2.0协议的QQ第三方授权登录iOS代码分析

简要说明: 授权登录已经成为注册方式里的主流,目前授权登录方式主要SSO跳转授权登录和OAuth2.0两种,前者好处无需用户再次输入密码就可以直接授权成功,但前提是必须用户手机端安装了该软件,比如QQ,后者的优势就是是否安装无关紧要,是一个HTML的页面呈现,麻烦就在于要输入用户名和密码,这就非常不爽了,但是有时候偏偏必须这么做,理由嘛,自行想想就好,接下来我们就看看如果利用OAuth2.0的方式来做QQ授权登录,如果想了解QQ的SSO授权登录,可以看我(博客主页)之前的博客:基于第三方QQ授权

用于新浪微博,腾讯QQ,淘宝 OAuth2.0 登陆的NET类库封装

目前开放OAuth2互联接口比较常用的有新浪微博,腾讯QQ,淘宝,其实还有微信,只是微信的我木有申请下来,因为手续麻烦,貌似需要扫描它的协议签字然后发过去,所以就放弃封装微信OAuth2登陆接口了,待以后给补上!关于淘宝OAuth网站接入登陆目前淘宝是暂停审核了貌似,也许是因为财大气粗比较任性吧,不过你还是可申请账号的,可以做应用提交给淘宝. 需要源代码的小伙伴请猛戳这里下载,需要已经编译好Dll的小伙伴请猛戳这里下载. 一. 下面给出各个OAuth2.0申请合作的地址: -- sinaweib

第三方登录:QQ登录实现(OAuth2.0)

一.创建应用 1.在 QQ互联 创建应用 地址:https://connect.qq.com/manage.html#/ 然后进行实名认证,创建应用,审核通过 然后点击查看,可以获得 APP ID 和 APP Key 回调地址如下 2.授权的基本原理 可以参考官方文档 1)根据QQ登录链接可以回调获得 code 2)根据APP ID .APP Key 和 code 可获得 token 3)根据 token 获得 OpenId 4)  根据 OpenId 可以获得用户的基本信息 其中 OpenId

QQ第三方授权登录OAuth2.0实现(Java)

准备材料 1.已经备案好的域名 2.服务器(域名和服务器为统一主体或域名已接入服务器) 3.QQ号 4.开发流程:https://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0 创建应用 1.访问 https://connect.qq.com/manage.html ,登录. 2.创建网站应用,填写网站基本信息以及平台信息,提交审核.注:网站回调域后续会用到,是点击授权登录时回调地址,需要与后续开发一致. 程序开

开发QQ互联ios版Ane扩张 辛酸史

来源:http://www.myexception.cn/operating-system/1451490.html 开发QQ互联ios版Ane扩展 辛酸史 开发QQ互联ios版Ane扩展辛酸史: 1.安装mac系统非常痛苦,找了好几个版本都装不上,同时对mac的基本操作和xcode的基本操作不熟悉. 2.用xcode建立ane项目(使用xcode-template-ane-master模板),引入第三方object-cframework,生成.a文件,供windows下生成ane文件. 发现w