原理图

第三方OAuth库

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

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

代码

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

   1: private String ConsumerKey = "xxxxxx";
   2: private String ConsumerSecret = "xxxxxxyyyyyyy";
   3: private String RequestURI = "https://sandbox.evernote.com/oauth";
   4: private String AuthorizationURI = "https://sandbox.evernote.com/OAuth.action";
   5: private String CallbackURI = "http://localhost/EvernoteAdage";
   6: private String RequestToken;
   7: private String RequestTokenSecret;
   8: private String Verifier;
   9:  
  10: private string Token;
  11: private long Expires;
  12:  
  13: private void button2_Click(object sender, RoutedEventArgs e)
  14: {
  15:     RequesCredentials();
  16:     //使用webBrowser,导航到授权的网站
  17:     this.webBrowser1.Navigate(AuthorizationURI + "?oauth_token=" +
  18:                                                         RequestToken);
  19: }
  20:  
  21: //获取RequestToken和RequestTokenSecret
  22: private void RequesCredentials()
  23: {
  24:     //CallbackUrl是一定要设置的
  25:     OAuthRequest client = OAuthRequest.ForRequestToken(ConsumerKey,
  26:                                         ConsumerSecret);
  27:     client.RequestUrl = RequestURI;
  28:     client.CallbackUrl = CallbackURI;
  29:  
  30:     String auth = client.GetAuthorizationQuery();
  31:     String url = client.RequestUrl + "?" + auth;
  32:     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  33:  
  34:     //获取请求结果
  35:     HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  36:     StreamReader reader = new StreamReader(response.GetResponseStream());
  37:     String result = reader.ReadToEnd();
  38:     reader.Close();
  39:     response.Close();
  40:  
  41:     //从结果中提取出RequestToken和RequestTokenSecret
  42:     RequestToken = result.Split('&')[0].Split('=')[1];
  43:     RequestTokenSecret = result.Split('&')[1].Split('=')[1];
  44: }
  45:  
  46: //针对授权的结果的Verifier
  47: private void webBrowser1_Navigating(object sender, NavigatingCancelEventArgs e)
  48: {
  49:     if(e.Uri.ToString().StartsWith("http://localhost/EvernoteAdage"))
  50:     {
  51:         var splitted = e.Uri.ToString().Split('&').Select(s => s.Split('=')).ToDictionary(s => s.First(), s => s.Last());
  52:         if(!splitted.ContainsKey("oauth_verifier"))
  53:         {
  54:             return;
  55:         }
  56:         Verifier = splitted["oauth_verifier"];
  57:         //获取最终的Token
  58:         AccessCredentials();
  59:  
  60:         //显示结果
  61:         this.textBlock.Text =
  62:             String.Format("Token = {0}\nExpires = {1}",
  63:                            Token, Expires);
  64:         //进行退出处理
  65:         this.webBrowser1.Visibility = Visibility.Hidden;
  66:     }
  67: }
  68:  
  69: //获取访问所需的Token Expires
  70: private 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();
  80:     String url = Client.RequestUrl + "?" + auth;
  81:     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  82:  
  83:     HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  84:     StreamReader reader = new StreamReader(response.GetResponseStream());
  85:     String result = reader.ReadToEnd();
  86:     reader.Close();
  87:     response.Close();
  88:  
  89:     var splitted = result.Split('&').Select(s => s.Split('=')).ToDictionary(s => s.First(), s => s.Last());
  90:     String deToken = splitted["oauth_token"];
  91:     String expiresStr = splitted["edam_expires"];
  92:  
  93:     Token = HttpUtility.UrlDecode(deToken);
  94:     Expires = Convert.ToInt64(expiresStr);
  95: }

转载于:https://www.cnblogs.com/atskyline/archive/2012/10/01/2709675.html

实现Evernote的OAuth授权相关推荐

  1. oauth最后的确认按钮_绕过GitHub的OAuth授权验证机制($25000)

    这几年来,信息安全研究一直是我的业余爱好,虽然有很多人专职做漏洞众测以获得奖励,但对我个人来说,我只对一些感兴趣的项目投入不多的时间去深入研究.今年,我想看看自己是否是全职漏洞赏金猎人的料,所以就从6 ...

  2. OAuth 授权timestamp refused问题

         400 timestamp_refused /oauth/request_token    两台机器161.155 两机器代码完全一致,但155部署时,启动需要OAuth授权用户,授权老是失 ...

  3. java 的新浪oauth_新浪微博OAuth授权的Java实现

    一.OAuth协议简介 OAuth授权在各社交网站中广泛使用,该协议使用户不需要直接向第三方应用提供用户名及密码,并且使一个账户在多个网站中使用成为可能,OAuth协议的细节描述可参考其官方网站:ht ...

  4. .net Core 2.2实现京东宙斯API采用OAuth授权方式调用

    1.实现对接京东接口,这里主要是写了采用Oauth授权的方式调用. 2.VS2017 使用了.net core 2.2 控制台程序,json库使用 jil(这个比较轻量级,加载数据较快,但也需要注意有 ...

  5. [iOS微博项目 - 2.0] - OAuth授权3步

    A.概念 OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名 ...

  6. 基于OWIN WebAPI 使用OAuth授权服务【客户端验证授权(Resource Owner Password Credentials Grant)】...

    适用范围 前面介绍了Client Credentials Grant ,只适合客户端的模式来使用,不涉及用户相关.而Resource Owner Password Credentials Grant模 ...

  7. 微信OAuth授权获取用户OpenId-JAVA(个人经验)

    个人微信小程序 可扫码体验 本文更新有可能先在开源中国.地址为:https://my.oschina.net/xshuai/blog/293458 https://open.weixin.qq.com ...

  8. 微信OAuth授权获取用户OpenId

    https://open.weixin.qq.com/ 这个是授权登陆自己网站的和我的这个是有区别的. 博客最新更改在这里https://my.oschina.net/xshuai/blog/2934 ...

  9. 12、oauth授权认证流程

    使用Spring Security4的四种方法概述 1.一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中: 2. 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用 ...

最新文章

  1. 未来教育计算机三级课后题答案,未来教育计算机三级课后题答案
  2. 重磅!监管再升级!微信、淘宝、抖音或将纳入“超级平台”监管
  3. 转载《Data Guard Broker基础》
  4. HTML meta标签总结
  5. 关于面向对象的的设计原则的使用
  6. T-SQL编程基础之二:条件选择、循环编程
  7. 网页设计个人主页源码_WebSSH - 网页上的SSH终端
  8. .NET技术(Path)
  9. paip.hadoop的应用研究总结
  10. php pdo 抛出异常模式,php实现的PDO异常处理操作分析
  11. 编译原理-第一节(东南大学廖力老师)
  12. linux分析rna-seq,RNA-seq 分析流程(一)linux部分
  13. java Io,读写文件拒绝访问
  14. Android VideoView播放视频详细步骤
  15. 2021校招offer薪资如何?(包含当今互联网各巨厂、大厂、中厂)
  16. 计算机主板提示ahci,电脑BIOS没有AHCI功能没有办法BIOS刷新怎么办
  17. word使用技巧---插入图片显示不全的解决方案
  18. JQueryUI自动补全 搜索提示实践
  19. rk3588 驱动调试记录
  20. windows中安装绿色版的mysql

热门文章

  1. LOL手游最能混分的英雄,前期刷野靠队友,迪丽阿巴亲自教学
  2. 【时光之穿越一千年】python全文字频解析【jieba】【matplotlib构图】案例
  3. solaris下同一机器2个实例之间切换
  4. 开发遇到的问题---【spring-security权限控制框架】
  5. 第二阶段冲刺10天 第一天
  6. dom解析和sax解析的区别及优缺点
  7. Vim 安装 YouCompleteMe
  8. []==![]为true
  9. linux 搭建github,github在linux上的环境搭建-Go语言中文社区
  10. java合并整形_Java:合并InputStreams(Java: merging InputStreams)