LinkedIn应用开发系列(三) --认证Request token

  上一章节大概分享了一些获取Request token的方法跟代码。

  在这一篇文章里,主要是介绍授权(authorized)Request toekn。得到request token后,就得要授权(authorized)才能访问了。同时还要得到验证码verifier,而授权地址是:https://api.linkedin.com/uas/oauth/authorize?oauth_token=6bdaf411-dc13-4c52-b013XXXXX402d82  

  直接在firefox上输入地址,就可以看到登陆页面了.

  LinkedIn应用开发系列(三) --认证Request token_第1张图片

  很显然,从表面上看只要输入EMAIL及密码正确登陆就可以得到授权了.问题肯定没有那么简单的,所以要看看它提交的到底有多少数据。

  好了,随便输入一个的用户名及密码(test)提交,然后用firebug分析一下post的数据:

  LinkedIn应用开发系列(三) --认证Request token_第2张图片

  (注:oauth_token屏蔽了一部分,见谅)

  如图,提交的数据包括URL都在上面的截图中显示出来了,其实包括email和密码(红框)

  很显然,我们只要通过爬网程序提交上面相应的数据,就可以认证了。

  可是,问题还是总是不觉得那么简单的, 然而,后来注意到上面有一个参数csrtfToken是每一次请求的结果都不一样的,还有别忘了一件事:cookie。

  然后用firebug分析一下,到底cookie写了些什么东西。

  LinkedIn应用开发系列(三) --认证Request token_第3张图片

   linkedin为了保证安全,每一次请求是要检查客户端的cookie是不是跟原来发出来的一样,否认就认为这个请求会不安全,所以,我们必须把请求链接的(https://api.linkedin.com/uas/oauth/authorize?oauth_token)cookie先获取下来,然后一模一样地发回提交请求当中,才能正常提交,否则就会提交数据不成功。

   可以看到cookie里面有JSESSIONID的值跟上面所提到的csrtfToken 的值是一样的,这就好办了

  好了,一切明了了,我们就可以跟据它的这些参数,我们就可以做爬网程序,获取认证授权及认证码

 

 

代码
   
   
string GenPostData( string email, string pwd, string token, string csrfToken)
{
string s = string .Format( @" email={0}&password={1}&duration=0&extra=&access=-3
&agree=true&oauth_token={2}&appId={3}&csrfToken={4}
&sourceAlias=uas-oauth-authorize
" ,
email, pwd, token,
string .Empty, csrfToken);
return s;

}

private string GetOauthToken()
{

CookieCollection collection
= null ;
HttpWebRequest cookie_request
=
(HttpWebRequest)System.Net.WebRequest.Create(
" https://api.linkedin.com/uas/oauth/authorize?oauth_token= " + Token);

CookieContainer container
= new CookieContainer();
cookie_request.Method
= " GET " ;
cookie_request.ContentType
= " application/x-www-form-urlencoded " ;
cookie_request.KeepAlive
= true ;
cookie_request.CookieContainer
= container;
HttpWebResponse cookie_response
= (HttpWebResponse)cookie_request.GetResponse();
collection
= cookie_response.Cookies;

string postData = GenPostData(Email, Pwd, this .Token,
collection[
" JSESSIONID " ].Value.Replace( " \ "" , string.Empty));

ASCIIEncoding encoding
= new ASCIIEncoding();
byte [] data = encoding.GetBytes(postData);
HttpWebRequest request
=
(HttpWebRequest)System.Net.WebRequest.Create(
" https://www.linkedin.com/uas/oauth/authorize/submit " );

request.Method
= " Post " ;
request.ContentType
= " application/x-www-form-urlencoded " ;
request.ContentLength
= data.Length;
request.KeepAlive
= true ;
request.CookieContainer
= container;
request.CookieContainer.Add(collection);

Stream newStream
= request.GetRequestStream();
newStream.Write(data,
0 , data.Length);
newStream.Close();

HttpWebResponse response
= (HttpWebResponse)request.GetResponse();
response.Cookies
= collection;

if (response.StatusCode == HttpStatusCode.OK)
{
NameValueCollection qs
= HttpUtility.ParseQueryString(response.ResponseUri.Query);
if (qs[ " oauth_token " ] != null )
{
this .Token = qs[ " oauth_token " ];
}
if (qs[ " oauth_verifier " ] != null )
{
this .Verifier = qs[ " oauth_verifier " ];
}
// StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
// string content = reader.ReadToEnd();
}
if ( ! string .IsNullOrEmpty(Verifier))
return Token;
return string .Empty;
}

 

 

   授权及认证码就可以成功获取到了.

   当然,前提上一章节提到的的callback的页面能正常访问,否则就会获取不到相关的token跟verifier,假如你在你的目录下有个callback.aspx的文件,你的callback的地证是http://localhost/linkedin/callback.aspx,那么你的oauth_callback地址就是http://localhost/linkedin/callback.aspx,但一定要保证本项目能正常Redirect到callback.aspx并且正常访问(callback.aspx不需要做任何事情)



 

你可能感兴趣的:(request)