实现Evernote的OAuth授权
原理图
第三方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授权相关推荐
- oauth最后的确认按钮_绕过GitHub的OAuth授权验证机制($25000)
这几年来,信息安全研究一直是我的业余爱好,虽然有很多人专职做漏洞众测以获得奖励,但对我个人来说,我只对一些感兴趣的项目投入不多的时间去深入研究.今年,我想看看自己是否是全职漏洞赏金猎人的料,所以就从6 ...
- OAuth 授权timestamp refused问题
400 timestamp_refused /oauth/request_token 两台机器161.155 两机器代码完全一致,但155部署时,启动需要OAuth授权用户,授权老是失 ...
- java 的新浪oauth_新浪微博OAuth授权的Java实现
一.OAuth协议简介 OAuth授权在各社交网站中广泛使用,该协议使用户不需要直接向第三方应用提供用户名及密码,并且使一个账户在多个网站中使用成为可能,OAuth协议的细节描述可参考其官方网站:ht ...
- .net Core 2.2实现京东宙斯API采用OAuth授权方式调用
1.实现对接京东接口,这里主要是写了采用Oauth授权的方式调用. 2.VS2017 使用了.net core 2.2 控制台程序,json库使用 jil(这个比较轻量级,加载数据较快,但也需要注意有 ...
- [iOS微博项目 - 2.0] - OAuth授权3步
A.概念 OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名 ...
- 基于OWIN WebAPI 使用OAuth授权服务【客户端验证授权(Resource Owner Password Credentials Grant)】...
适用范围 前面介绍了Client Credentials Grant ,只适合客户端的模式来使用,不涉及用户相关.而Resource Owner Password Credentials Grant模 ...
- 微信OAuth授权获取用户OpenId-JAVA(个人经验)
个人微信小程序 可扫码体验 本文更新有可能先在开源中国.地址为:https://my.oschina.net/xshuai/blog/293458 https://open.weixin.qq.com ...
- 微信OAuth授权获取用户OpenId
https://open.weixin.qq.com/ 这个是授权登陆自己网站的和我的这个是有区别的. 博客最新更改在这里https://my.oschina.net/xshuai/blog/2934 ...
- 12、oauth授权认证流程
使用Spring Security4的四种方法概述 1.一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中: 2. 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用 ...
最新文章
- 未来教育计算机三级课后题答案,未来教育计算机三级课后题答案
- 重磅!监管再升级!微信、淘宝、抖音或将纳入“超级平台”监管
- 转载《Data Guard Broker基础》
- HTML meta标签总结
- 关于面向对象的的设计原则的使用
- T-SQL编程基础之二:条件选择、循环编程
- 网页设计个人主页源码_WebSSH - 网页上的SSH终端
- .NET技术(Path)
- paip.hadoop的应用研究总结
- php pdo 抛出异常模式,php实现的PDO异常处理操作分析
- 编译原理-第一节(东南大学廖力老师)
- linux分析rna-seq,RNA-seq 分析流程(一)linux部分
- java Io,读写文件拒绝访问
- Android VideoView播放视频详细步骤
- 2021校招offer薪资如何?(包含当今互联网各巨厂、大厂、中厂)
- 计算机主板提示ahci,电脑BIOS没有AHCI功能没有办法BIOS刷新怎么办
- word使用技巧---插入图片显示不全的解决方案
- JQueryUI自动补全 搜索提示实践
- rk3588 驱动调试记录
- windows中安装绿色版的mysql
热门文章
- LOL手游最能混分的英雄,前期刷野靠队友,迪丽阿巴亲自教学
- 【时光之穿越一千年】python全文字频解析【jieba】【matplotlib构图】案例
- solaris下同一机器2个实例之间切换
- 开发遇到的问题---【spring-security权限控制框架】
- 第二阶段冲刺10天 第一天
- dom解析和sax解析的区别及优缺点
- Vim 安装 YouCompleteMe
- []==![]为true
- linux 搭建github,github在linux上的环境搭建-Go语言中文社区
- java合并整形_Java:合并InputStreams(Java: merging InputStreams)