原理图

实现Evernote的OAuth授权

第三方OAuth库

由于当中有一个签名的字段,需要实现一些比较复杂的操作。所以使用了danielcrenna的OAuth的库。下载地址https://github.com/danielcrenna/oauth

他里面的实例好像有点问题,好在库本身是可以使用的。而且非常方便。

代码

因为我是本地的程序所以我需要使用一个WebBrowser控件来完成认证授权的过程,另外也是因为是本地程序的原因我的回调地址就设置了一个localHost,这个回调地址必须有,不然会出现401错误,而且之后需要通过这个回调地址获取Verifier.这个回调地址,不一定是要可以访问的。

;
;
;
;
;
private String RequestToken;
private String RequestTokenSecret;
private String Verifier;
   9:  
string Token;
long Expires;
  12:  
object sender, RoutedEventArgs e)
  14: {
  15:     RequesCredentials();
//使用webBrowser,导航到授权的网站
 +
  18:                                                         RequestToken);
  19: }
  20:  
//获取RequestToken和RequestTokenSecret
void RequesCredentials()
  23: {
//CallbackUrl是一定要设置的
  25:     OAuthRequest client = OAuthRequest.ForRequestToken(ConsumerKey,
  26:                                         ConsumerSecret);
  27:     client.RequestUrl = RequestURI;
  28:     client.CallbackUrl = CallbackURI;
  29:  
  30:     String auth = client.GetAuthorizationQuery();
 + auth;
  32:     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  33:  
//获取请求结果
  35:     HttpWebResponse response = (HttpWebResponse)request.GetResponse();
new StreamReader(response.GetResponseStream());
  37:     String result = reader.ReadToEnd();
  38:     reader.Close();
  39:     response.Close();
  40:  
//从结果中提取出RequestToken和RequestTokenSecret
'=')[1];
'=')[1];
  44: }
  45:  
//针对授权的结果的Verifier
object sender, NavigatingCancelEventArgs e)
  48: {
))
  50:     {
'=')).ToDictionary(s => s.First(), s => s.Last());
))
  53:         {
return;
  55:         }
];
//获取最终的Token
  58:         AccessCredentials();
  59:  
//显示结果
this.textBlock.Text =
,
  63:                            Token, Expires);
//进行退出处理
this.webBrowser1.Visibility = Visibility.Hidden;
  66:     }
  67: }
  68:  
//获取访问所需的Token Expires
void AccessCredentials()
  71: {
  72:     OAuthRequest Client = OAuthRequest.ForAccessToken(ConsumerKey,
  73:                                                       ConsumerSecret,
  74:                                                       RequestToken,
  75:                                                       RequestTokenSecret,
  76:                                                       Verifier);
  77:     Client.RequestUrl = RequestURI;
  78:  
  79:     String auth = Client.GetAuthorizationQuery();
 + auth;
  81:     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  82:  
  83:     HttpWebResponse response = (HttpWebResponse)request.GetResponse();
new StreamReader(response.GetResponseStream());
  85:     String result = reader.ReadToEnd();
  86:     reader.Close();
  87:     response.Close();
  88:  
'=')).ToDictionary(s => s.First(), s => s.Last());
];
];
  92:  
  93:     Token = HttpUtility.UrlDecode(deToken);
  94:     Expires = Convert.ToInt64(expiresStr);
  95: }

相关文章: