betway官网

betway官网[腾讯社区开放平台].NET SDK基于New BSD协议开源。[腾讯社区开放平台]介绍开放授权协议-OAuth

九月 26th, 2018  |  球星丑闻

“QQ登录”使用户能使用QQ账号一键登录接入网站,大大降低了登记、登录的门槛。借助大之QQ用户群,给第三正在网站带更多新用户。已报到用户还足以拿以第三方网站发表、分享的信就经常共到QQ空间,使网站内容通过好友关系取得进一步的传播。

betway官网 1OAuth
(开放授权)
是一个放标准,允许用户授权第三在网站访问他们存储于另外的服务提供者上之音,而无欲拿用户称以及密码提供于第三在网站或者享受他们数据的有着内容。OAuth是OpenID的一个互补,但是完全不同的劳动。

腾讯社区开放平台.NET
SDK是根据腾讯社区开放平台的OAuth登录文档和API文档
使用C#支付的.NET
4.0之一个仓库,目前完全兑现了腾讯社区开放平台的持有接口。可以加速而的社区对接到腾讯社区开放平台,免去大量的再的调节开发之时刻,所以自己是以New
BSD协议创建的开源项目,各位有同等需求的各位同事参与建设在一个色,项目之托管地址是http://qqconnect.codeplex.com/。

OAuth,一个为人还要好又恨的征协议,它叫许多主流的周旋网站(SNS)与网络服务打开了封闭已久远的证实大门,它吗是当网及当面个人要亲信信息
(private data)
前极端关键的征管道有,重要的凡,在这协议下,所有公开于外界的个体数据会惨遭两独号的保障,OAuth
保障用户可在应用程序要求数前由用户做肯定授权,只有授权过之资源才会开为应用程序读取,而且
OAuth
公开之风味,可以于应用程序在极少量程序代码的改动下,移植到不同的劳务持续行使,而
OAuth
协议呢吃服务端精确的主宰而放之劳动,并且提供使用者授权的管道以吃使用者能随意支配授权也,而且客户端应用程序只要动
HTTP 协议即可使OAuth
服务。那为何我会说以爱又怨呢?因为它实在不容易使用,会于想使用其的开发人员头发吃批捕掉好几百绝望,最近2周在折腾腾讯开放社区的QQ登陆,QQ登陆也是采取OAuth
,具体参看
【QQ登录】OAuth登录文档,开始的时利用的是DotnetOpenauth(网址为:
http://www.dotnetopenauth.net,可惜被堵了,需要寻找个阶梯),一直进展非下,问题的故就是腾讯开放社区的QQ登陆的OAuth不是挺专业,无奈的余不得不根据QQ登陆文档重头构建一个验证库,我把它托管在codeplex上,地址是http://qqconnect.codeplex.com/,所有的功力还免形成,欢迎有同等需求的诸位同学参加。

腾讯社区开放平台.NET
SDK使得你调用腾讯社区开放平台的REST接口非常容易,你就待到http://connect.opensns.qq.com/apply
申请到得的consumer key和consumer
secret,在你的报名经过了腾讯社区开放平台的查处后哪怕足以抱。这个深的重中之重特点如下:

OAuth 是 Open Authorization 的缩写,由 2006
年起草的初证标准,当时产业界还有有见仁见智之商议,像是 Open
ID,Shibboleth,WS-Federation 等签订,这些还叫称呼 Central
Authentication Service
(中央验证服务),只是这些协议利用及都不怎么好,有些有显而易见的软件平台限制,有些则是要作某些套件等,比如微软的WIF,OAuth
则是比较深起的劳务,但其之所以起大概,又相当于 HTTP
的正统,任何可以生出 HTTP 通讯方式的阳台跟函式库都得以用,它为蛮常加配
Open ID 使用,所以于一部分重型网络服务平台 (ex: Google, Yahoo) 会看到 Open
ID + OAuth 的格式,但 OAuth
本身为负有证明能力,不过其是出于劳动端来举行证。Open ID
亦弗是以系列和之重要,所以我们唯有见面以当时多重文中看到 OAuth 的下方式。

  • 打包好了腾讯社区开放平台的OAuth协议看腾讯社区开放平台的REST接口
  • 与腾讯社区开放平台的接口保持同步(目前只有一个接口,将来必定会随地长)

那么 OAuth 是怎运行的吧?虽然各大网站还发出供 OAuth
的操作流程,但基本上会是因下图的流程也依照:

以此库房使用Visual Studio 2010同C#
3.0构建的,主要扩展和行使到下面的开源库:

betway官网 2

  1. DotnetOpenauth:DotNetOpenAuth
    是一个 C# 开发包,用以实现 OpenID 2.0 的提供者、中继方(Relying
    Party)、OAuth使用者和OAuth服务提供者;同时支持 InfoCard Selector
    。OAuth协议客户端之落实达标参照了是类别之代码。
  2. Jayrock:Jayrock是一个LGPL的开源之软件,实现了JSON和JSON-RPC,支持微软ASP.NET框架。具体可以参见文章:Jayrock:
    JSON and JSON-RPC for
    .NET

高达图来自 http://oauth.net/core/1.0/#anchor9 

面我们打高层次了解了之SDK的实现原理,下面我们介绍如何用此SDK来跟腾讯社区开放平台进行互动。SDK主要发生星星点点单需要关注之类QzoneSDK.Context.QzoneContext

大概上会见分成三个次:

和 QzoneSDK.Qzone。

  1. 客户端应用程序向服务要求一个 Request Token,这个 Token
    会就此来分辨应用程序要求存取的对话。

  2. 客户端应用程序开启浏览器 (Desktop Application)
    或由于劳务导向到授权的网页 (Web
    Application),由使用者决定是否授权,若使用者决定授权时,客户端应用程序会沾一个
    Verifier Token,这个 Token 会在稍后往服务要求看权限。

  3. 客户端应用程序向服务交由 Request Token 与 Verifier
    Token,服务在印证后核发 Access Token,这个 Token
    会在应用程序每次向劳动要求资源时,由客户端应用程序提交以验证权限。

率先我们做【QQ登录】OAuth登录文档来证明。Qzone
OAuth总体处理流程里共有七独步骤,从脚的共同体流程图中可以看:

这就是说服务是安决定客户端采用的凡 OAuth 协议时,其实大粗略,是透过 HTTP
Header 中之 Authorization 标头数据,应用程序在 HTTP 要求吃进入 OAuth
oauth…. 的信息,服务会拆解这个标头中的 OAuth
数据开展检查为说明客户端的权柄,例如下面的 HTTP Request 就是超人的
OAuth调用:

betway官网 3

POST /accounts/OAuthGetRequestToken HTTP/1.1

左手:为老三正值网站要举行的工作。在每个绿色的正方里,标明了第三方应调用的接口,接口主要功用和逻辑见Qzone
OAuth接口说明。

Host: www.google.com

右手:为Qzone接收及第三方以发过来的要后开的事情。第三正在呼吁的出殡地址与应涵盖的参数在连下去的单步详解中进行了求证

Content-Type: application/x-www-form-urlencoded

经类QzoneSDK.Context.QzoneContext带上你申请的oauth_consumer_key
(对应Qzone的appid)和oauth_consumer_secret
(对应Qzone的appkey)到腾讯社区开放平台获取到Request
Token,然后拿tokenKey和tokensecret保存到Session里,后续要用。示例代码如下:

Authorization: OAuth

string key = ConfigurationManager.AppSettings[“ConsumerKey”];

oauth_consumer_key=”example.com”,

string secret = ConfigurationManager.AppSettings[“ConsumerSecret”];

oauth_signature_method=”RSA-SHA1″,

var context = new QzoneSDK.Context.QzoneContext(key, secret);

oauth_signature=”wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D”,

//Get a Request Token

oauth_timestamp=”137131200″,

var callbackUrl = ConfigurationManager.AppSettings[“callbackUrl”];
//”/qzone/account/QQCallback.aspx”;

oauth_nonce=”4572616e48616d6d65724c61686176″,

var requestToken = context.GetRequestToken(callbackUrl);

oauth_version=”1.0″

//request token, request token secret 需要保存起来

oauth_callback=”http://www.example.com/showcalendar.html”

//在demo演示着,直接保存在全局变量中.真实情况需要网站自己处理

合 OAuth 最窘迫的部份就是错过打出懂这些以 OAuth 中规定的参数,而及时为是运
OAuth
协议开发客户端应用程序的无比老门坎,只要通过之门槛后,之后的劳务走访就更换得够呛大概。

Session[“requesttokenkey”] = requestToken.TokenKey;

下来证实这些参数的意思及用法。OAuth
使用及顶麻烦了解以及测试的,莫过于这些 OAuth 的参数,尤其是当 OWASP 的 Web
Security Report
(https://www.owasp.org/index.php/Main_Page)之下,又发生 Improper Error
Handling 的安全漏洞问题,因此于测试 OAuth 时,最轻吃的痛苦就是光知
HTTP 400 (Bad Request) 或 HTTP 401
(Unauthorized),有些服务还见面供有错讯息,但也出少数且无提供的,而且就是出供,也不肯定立便可窥见及问题在哪
(例如: Signature
Invalid),往往都使做多的尝试才当真找到问题在啊,我当测试 QQ登陆 的
OAuth 时就吃了多之苦头…

Session[“requesttokensecret”] = requestToken.TokenSecret;

  • oauth_consumer_key:这是由服务所提供的应用程序密钥,要在每次 HTTP
    Request 中附加到 Authorization 标头中。
  • oauth_consumer_secret:这是由于劳动提供的应用程序签章密钥,会用来算
    siguature 用。
  • oauth_token:由服务在说明后,核发的 Request Token 或 Access
    Token,要当每次 HTTP Request 中附加到 Authorization 标头中。
  • oauth_token_secret:由劳动证后,核发的签章密钥,会以及
    oauth_consumer_secret 一起从而来计算 signature 用。
  • oauth_timestamp:由 UTC 时间 1970/1/1 00:00:00
    起至立刻时刻所经的秒数,但为产生部分开发人员使用 64
    位的随意数字来代用。
  • oauth_nonce:64 位的轻易字符串 (64bit random
    string),这个说法未轻了解,不过可以一直由 oauth_timestamp
    转换而得。
  • oauth_signature_method:决定 signature 使用的算法,目前 OAuth 1.0
    中定义了 HMAC-SHA1,RSA-SHA1 以及 PLAINTEXT 三栽格式,但一般会动
    HMAC-SHA1 较多,Google OAuth Playground 默认的算法是 RSA-SHA1。
  • oauth_signature:这是极爱错的平宗资料,它会冲三单等级的
    Request 数据,使用 oauth_signature_method 决定的算法,使用
    oauth_consumer_key 以及 oauth_token_secret 计算的签章值,但一旦
    Request 的多寡有误时,signature
    签章值也会错,而且对除错(参数顺序错误呢不行…)。
  • oauth_version:指定 OAuth 的版价值,目前为 1.0。
  • oauth_verifier:在 Verifier 阶段时,由劳动核发的检核码,QQ登陆的OAuth的悲剧在此间,这个参数称为受改成化了oauth_vericode
  • oauth_callback:由客户端应用程序设定,服务回呼时使用的网址,若应用程序是
    Desktop Application 时,此值可要是为 oob
    (Out-Of-Box),此时劳动会就此不同之办法来开展使用者授权等。

var authenticationUrl = context.GetAuthorizationUrl(requestToken,
callbackUrl);

这些参数中最好急需领取的,莫过于 oauth_signature 了,它用事先抱 Request
的参数数据,再就此 consumer key 和 token secret 进行哈希计算 (使用
HMAC-SHA1 或许 RSA-SHA1 算法) 后生的署名值密钥。Request
参数数据让誉为基础字符串 (base string),基础字符串是由 HTTP Method,
Request URL 以及 Normalized Parameters 组合,它的格式是
{HTTP_METHOD}&{URL}&{PARAMETERS},HTTP Method 可以是 GET 或 POST,URL
会随要求不同而具备不同,而 Normalized Parameters
是平等栽标准的参数清单,它而入两独标准化:

Response.Redirect(authenticationUrl);

  1. 不能不使是 Lexicographical byte
    order
    的次第,简单的游说,就是使以字母逐一判断排序,如果当参数中之 key
    值顺序相同时,就设较对 value 值。

  2. 每个参数还如为 key=value 方式结合。

  3. 每个值都使经 UrlEncode() 处理了,这个 UrlEncode()
    是一个专程的本,我们以程序设计时再说明。

用户以腾讯社区开放平台上授权下后会导向到你的网站,也便是上图的老三步,在门户上述的callback
的页面及就是足以抱上图第四步之参数,利用上述获得的参数调用QzoneSDK.Qzone进行第五步调用,就可以得到AccessToken,这个AccessToken,目前access_token(及其secret)是长期有效的,和某一个openid对应,目前足支撑线下得到该openid的音讯。

比如说 Request Token 阶段,必须使生 oauth_consumer_key,
oauth_signature_method, oauth_version, oauth_callback, oauth_nonce,
oauth_siguature 与 oauth_timestamp 等参数,在处理 Normalized
Parameters 时,则早晚要是用下列顺序排序:

if (Request.QueryString[“oauth_vericode”] != null)

  • oauth_callback=xxx
  • oauth_consumer_key=xxx
  • oauth_nonce=xxx
  • oauth_signature_method=xxx
  • oauth_timestamp=xxx
  • oauth_version=xxx

{

若是 Normalized Parameters 也规定,不能够包含
oauth_signature,所以参数中莫得以发 oauth_signature。下列字符串就是
base string 的范例(有分店,真实的状是一整行):

var requestTokenKey = Session[“requesttokenkey”].ToString();

GET&http%3A%2F%2Fopenapi.qzone.qq.com%2Foauth%2Fqzoneoauth_request_token&
oauth_consumer_key%3D200001%26oauth_nonce%3D1606024431%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1299143758%26oauth_version%3D1.0

var requestTokenSecret = Session[“requesttokensecret”].ToString();

以 base string 组合出后,即可使 .NET 的
System.Security.Cryptographics 命名空间中的 HMACSHA1 类,使用
ComputeHash() 计算签名值密钥,并设定也 oauth_siguature 参数,作为 OAuth
验证信息的签名用。

var verifier = Request.QueryString[“oauth_vericode”];

string key = ConfigurationManager.AppSettings[“ConsumerKey”];

string secret = ConfigurationManager.AppSettings[“ConsumerSecret”];

QzoneSDK.Qzone qzone = new QzoneSDK.Qzone(key, secret, requestTokenKey,
requestTokenSecret, verifier);

//这里需要将qzone.OAuthTokenKey, qzone.OAuthTokenSecret, qzone.OpenID
存储起来用于末端的API的拜访

QzoneSDK.Qzone qzone2 = new QzoneSDK.Qzone(key, secret,
qzone.OAuthTokenKey, qzone.OAuthTokenSecret, string.Empty, true,
qzone.OpenID);

Session[“qzonesdk”] = qzone2;

qzone2 = Session[“qzonesdk”] as QzoneSDK.Qzone;

var currentUser = qzone2.GetCurrentUser();

var user = (BasicProfile)JsonConvert.Import(typeof(BasicProfile),
currentUser);

if (null != user)

{

this.Nickname.Text = user.Nickname;

this.Figureurl.Text = user.Figureurl;

}

}

上述代码还现身说法调用腾讯开放社区目前唯一的一个API (
get_user_info),通过Jayrock库将Json数据易为仓库中定义之用户登录数的实体BasicProfile。

项目之下载地址:http://qqconnect.codeplex.com/releases/view/65042 

品种文档:腾讯社区开放平台教程.pdf

Demo: http://www.dotnetting.cn/qzone/Account/Login.aspx

QQ群:80767552

相关文章

标签:,

Your Comments

近期评论

    功能


    网站地图xml地图