java实现 印象笔记AOuth 授权认证
java实现 印象笔记AOuth 授权认证
原创文章,转载请注明出处
前言:
由于我们公司最近考虑在我们的设备上接入第三方公有云(有道云笔记,印象笔记等),所以就让我调研市面上的公有云,可接入我们设备的可行性,由于有道云笔记的key的申请需要等待,所以我就先从印象笔记的入手了
话不多说,直接开始
第一:
首先我们需要去印象笔记官网申请 API Key,
申请成功后印象笔记会给我们两个参数:
Consumer Key: yuanlanglang
Consumer Secret: 58c76374a986a432
申请地址:https://dev.yinxiang.com/doc/articles/read_only_notes.php
第二:
在我们的项目pom文件中添加javaSDK的依赖和授权所需的依赖
<dependency><groupId>com.evernote</groupId><artifactId>evernote-api</artifactId><version>1.25.1</version></dependency><dependency><groupId>org.scribe</groupId><artifactId>scribe</artifactId><version>1.3.1</version></dependency>
第三:
编写工具类,代码如下
package com.ratta.supernotes.util;import java.util.HashMap;
import java.util.Map;import org.scribe.builder.ServiceBuilder;
import org.scribe.builder.api.EvernoteApi;
import org.scribe.model.Token;
import org.scribe.model.Verifier;
import org.scribe.oauth.OAuthService;import com.evernote.auth.EvernoteAuth;
import com.evernote.auth.EvernoteService;/**
* @author yuanlanglang
*/
public class EverNoteOAuthUtil {static final String CONSUMER_KEY = "yuanlanglang";static final String CONSUMER_SECRET = "58c76374a986a432";static final EvernoteService EVERNOTE_SERVICE = EvernoteService.SANDBOX;static final String CALLBACK_URL = "https://supernote.com.cn/";public static OAuthService oAuthService() {String thisUrl = "https://supernote.com.cn/";//String thisUrl = request.getRequestURL().toString();String cbUrl = thisUrl.substring(0, thisUrl.lastIndexOf('/') + 1) + CALLBACK_URL;Class<? extends EvernoteApi> providerClass = EvernoteApi.Sandbox.class;if (EVERNOTE_SERVICE == EvernoteService.PRODUCTION) {providerClass = org.scribe.builder.api.EvernoteApi.class;}OAuthService service = new ServiceBuilder().provider(providerClass).apiKey(CONSUMER_KEY).apiSecret(CONSUMER_SECRET).callback(cbUrl).build();return service;}/*** * EverNote OAuth 授权第一步* * 该方法获三个数据:* 1、获取跳转授权页面的连接 authUrl* 2、获取 authUrl 和第三步中所需要的 oauthToken* 3、获取第三步中需要要的 oauthTokenSecret* * @return requestMap*/public static Map<String, String> getRequestToken(){OAuthService service = oAuthService();Token requestToken = service.getRequestToken();String oauthToken = requestToken.getToken();String oauthTokenSecret = requestToken.getSecret();String authUrl = service.getAuthorizationUrl(requestToken);System.out.println(authUrl);Map<String, String> requestMap = new HashMap<String, String>();requestMap.put("oauthToken", oauthToken);requestMap.put("oauthTokenSecret", oauthTokenSecret);requestMap.put("authUrl", authUrl);return requestMap;}/*** EverNote OAuth 授权第三步* * 该方法获取连个数据* 1、获取用户访问令牌 accessToken* 2、获取 noteStoreUrl* * @param oauthToken 第一步获取到的值* @param oauthTokenSecret 第一步获取到的值* @param oauthVerifier 第二步获取到的值* (第二步是网页端的操作,网页端使用第一步返回的 authUrl 连接进行登录授权,授权成功后回调的浏览器地址栏里面会看到该参数)* @return accessMap*/public static Map<String, String> getAccessToken (String oauthToken, String oauthTokenSecret, String oauthVerifier){OAuthService service = oAuthService();Token scribeRequestToken = new Token(oauthToken, oauthTokenSecret);Verifier scribeVerifier = new Verifier(oauthVerifier);Token scribeAccessToken = service.getAccessToken(scribeRequestToken, scribeVerifier);System.out.println(scribeAccessToken.getRawResponse());EvernoteAuth evernoteAuth = EvernoteAuth.parseOAuthResponse(EVERNOTE_SERVICE, scribeAccessToken.getRawResponse());String accessToken = evernoteAuth.getToken();String noteStoreUrl = evernoteAuth.getNoteStoreUrl();Map<String, String> accessMap = new HashMap<String, String>();accessMap.put("accessToken", accessToken);accessMap.put("noteStoreUrl", noteStoreUrl);return accessMap;}
}
最后看一下一整个流程;
1、请求authUrl:
运行上面的代码得到的结果是:
保存requestTokenSecret和requestToken 第三步需要使用
得到的authUrl= https://sandbox.evernote.com/OAuth.action?oauth_token=yuanlanglang.169384C3F8D.687474703A2F2F6C6F63616C686F73742F687474703A2F2F6C6F63616C686F7374.89C3CFC6DF669C10895736938D34BF18
2、请求登录授权
我们把这个地址返回给浏览器客户端,客户端用这个地址就可以直接跳转到印象笔记的授权页面;
如图:
登录成功后会跳转到询问页面
确认授权后会跳转到我们的回调页面
回调地址的设置在下图的地方
我们需要的是回调地址栏后面的有效参数oauth verifier:
https://supernote.com.cn/http://supernote.com.cn/?oauth_token=yuanlanglang.16938575B09.687474703A2F2F73757065726E6F74652E636F6D2E636E2F687474703A2F2F73757065726E6F74652E636F6D2E636E2F.1D783DCE998E5D625C5819FEBE8D5B6D&oauth_verifier=A05D541D1A673701CC2C8A70C2FCC6CE&sandbox_lnb=false#/home
3、获取用户访问令牌 accessToken
拿去到这个值以后,我们需要用它去获取用户访问令牌 accessToken
运行这段代码得到以下数据:
其中:accessToken = S=s1:U=952e4:E=1709013f58d:C=1693862c940:P=81:A=yuanlanglang:V=2:H=01d59843f8a3391c402676c7bbc080ed
4、获取印象笔记本列表
通过accessToken 获取笔记本列表,查看accessToken是否可用
运行这段代码得到如下数据
然后,我们看看印象笔记中我们是否就只有有这个笔记本
如图所示;印象笔记中,我只有这么一个笔记本, 笔记本下面有两个笔记。
至此, java实现 印象笔记AOuth 授权认证过程就已经完成了。
参考资料:https://dev.yinxiang.com/doc/
https://github.com/evernote/evernote-sdk-java
java实现 印象笔记AOuth 授权认证相关推荐
- JAVA集成apple授权认证登录【后端认证授权】
1.需求描述 APP需要提交苹果的App Store审核时,因为集成了微信授权登录,导致审核失败了,审核失败的理由是:集成了第三方授权的APP,也需要集成Apple授权认证,不然审核通过不了,强制捆绑 ...
- 你还不了解基于session的授权认证吗?
前言 在漫长的开发过程中,权限认证是一个永恒不变的话题,随着技术的发展,从以前的基于sessionId的方式,变为如今的token方式.session常用于单体应用,后来由于微服务的兴起,分布式应用占 ...
- 微信公众号开发之网页授权认证获取用户的详细信息,实现自动登陆
原创声明:本文转来源本人另一博客[http://blog.csdn.net/liaohaojian/article/details/70175835]绝非他人处转载 从接触公众号到现在,开发维护了2个 ...
- Springboot整合shiro基于url身份认证和授权认证
你还不会shiro吗? 前奏 shiro核心配置文件(rolesFilter可选). 身份认证 多表登录源如何操作? 授权管理 如何解决界面多角色/资源问题 访问效果 权限管理在日常开发中很重要,所以 ...
- (微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆)http://blog.csdn.net/liaohaojian/article/details/70175835
从接触公众号到现在,通过不断积累学习,对如何调用微信提供接口有了一定的见解.当然在开发过程中遇到很多问题,现在把部分模块功能在这备案一下,做个总结也希望能给其他人帮助 工欲善其事,必先利其器,先看看开 ...
- 基于J2EE+JBPM3.x/JBPM4.3+Flex流程设计器+Jquery+授权认证)企业普及版贝斯OA与工作流系统...
基于J2EE+JBPM3.x/JBPM4.3+Flex流程设计器+Jquery+授权认证)企业普及版贝斯OA与工作流系统 课程学习地址:http://***/goods.php?id=173 本项目是 ...
- spring cloud+.net core搭建微服务架构:Api授权认证(六)
前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...
- Java应用程序的令牌认证
建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现. 注册 ,再也不会建立auth了! 20 ...
- mysql url认证_Springboot+shiro基于url身份认证和授权认证
你还不会shiro吗?前奏 shiro核心配置文件(rolesFilter可选). 身份认证 多表登录源如何操作? 授权管理 如何解决界面多角色/资源问题 访问效果 权限管理在日常开发中很重要,所以硬 ...
最新文章
- 开源中国git关联xcode操作步骤
- 低级程序员和高级程序员的区别在哪?学会像高级程序员一样思考!
- LiteOS内核源码分析:静态内存Static Memory
- Spring多个版本源码地址分享
- 搭建C语言开发环境,编写hello,world
- C#调用PB生成dll详解
- Time-Series Representation Learning via Temporal and Contextual Contrasting
- 解密excel.xls文件密码
- ios订阅的升级和降级
- WIFISON使用及适配
- 文件流方式导出Excel表格
- 索尼 a7 IV 和佳能 EOS R6 哪个好
- 线性代数1.3行列式的按行展开
- PowerMock简介及常见注解解释
- KVM 虚拟化 介绍
- 【HJ42 学英语】C++
- poj解题报告——poj 1528 Perfection
- 图文编排之HTML身份介绍浮动(图片换成自己的就行啦)
- 生前一杯水,胜过坟前万吨灰
- 模具设计与制造专业毕业设计题目推荐
热门文章
- 戴着面具的复仇者 —— 揭秘:激进黑客组织“匿名者
- 大话2点卡稳定服务器,大话西游2:当年他承包兄弟们的点卡 如今找回了17年前的号...
- Unity学习笔记--2D单向平台制作方法
- 计算机考试面试硬件方面的知识,安徽公务员考试专业知识计算机类:计算机硬件系统的组成及其基本工作原理...
- 经典:CSS垂直居中的七种方法
- c语言中输入字符转换成整数,c语言数字字符串转换成整数 C语言中如何将数字变成字符串啊?...
- python 二重积分_python中求二维积分的方法
- 网速慢怎么回事 看看路由器旁边是否有这些东西
- 触摸事件中touchstar、touchmove、touchend、touchcancel事件应用方法及实例
- 蔬菜水果肉类奶制品厨房用具英语表达