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 授权认证相关推荐

  1. JAVA集成apple授权认证登录【后端认证授权】

    1.需求描述 APP需要提交苹果的App Store审核时,因为集成了微信授权登录,导致审核失败了,审核失败的理由是:集成了第三方授权的APP,也需要集成Apple授权认证,不然审核通过不了,强制捆绑 ...

  2. 你还不了解基于session的授权认证吗?

    前言 在漫长的开发过程中,权限认证是一个永恒不变的话题,随着技术的发展,从以前的基于sessionId的方式,变为如今的token方式.session常用于单体应用,后来由于微服务的兴起,分布式应用占 ...

  3. 微信公众号开发之网页授权认证获取用户的详细信息,实现自动登陆

    原创声明:本文转来源本人另一博客[http://blog.csdn.net/liaohaojian/article/details/70175835]绝非他人处转载 从接触公众号到现在,开发维护了2个 ...

  4. Springboot整合shiro基于url身份认证和授权认证

    你还不会shiro吗? 前奏 shiro核心配置文件(rolesFilter可选). 身份认证 多表登录源如何操作? 授权管理 如何解决界面多角色/资源问题 访问效果 权限管理在日常开发中很重要,所以 ...

  5. (微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆)http://blog.csdn.net/liaohaojian/article/details/70175835

    从接触公众号到现在,通过不断积累学习,对如何调用微信提供接口有了一定的见解.当然在开发过程中遇到很多问题,现在把部分模块功能在这备案一下,做个总结也希望能给其他人帮助 工欲善其事,必先利其器,先看看开 ...

  6. 基于J2EE+JBPM3.x/JBPM4.3+Flex流程设计器+Jquery+授权认证)企业普及版贝斯OA与工作流系统...

    基于J2EE+JBPM3.x/JBPM4.3+Flex流程设计器+Jquery+授权认证)企业普及版贝斯OA与工作流系统 课程学习地址:http://***/goods.php?id=173 本项目是 ...

  7. spring cloud+.net core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  8. Java应用程序的令牌认证

    建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现. 注册 ,再也不会建立auth了! 20 ...

  9. mysql url认证_Springboot+shiro基于url身份认证和授权认证

    你还不会shiro吗?前奏 shiro核心配置文件(rolesFilter可选). 身份认证 多表登录源如何操作? 授权管理 如何解决界面多角色/资源问题 访问效果 权限管理在日常开发中很重要,所以硬 ...

最新文章

  1. 开源中国git关联xcode操作步骤
  2. 低级程序员和高级程序员的区别在哪?学会像高级程序员一样思考!
  3. LiteOS内核源码分析:静态内存Static Memory
  4. Spring多个版本源码地址分享
  5. 搭建C语言开发环境,编写hello,world
  6. C#调用PB生成dll详解
  7. Time-Series Representation Learning via Temporal and Contextual Contrasting
  8. 解密excel.xls文件密码
  9. ios订阅的升级和降级
  10. WIFISON使用及适配
  11. 文件流方式导出Excel表格
  12. 索尼 a7 IV 和佳能 EOS R6 哪个好
  13. 线性代数1.3行列式的按行展开
  14. PowerMock简介及常见注解解释
  15. KVM 虚拟化 介绍
  16. 【HJ42 学英语】C++
  17. poj解题报告——poj 1528 Perfection
  18. 图文编排之HTML身份介绍浮动(图片换成自己的就行啦)
  19. 生前一杯水,胜过坟前万吨灰
  20. 模具设计与制造专业毕业设计题目推荐

热门文章

  1. 戴着面具的复仇者 —— 揭秘:激进黑客组织“匿名者
  2. 大话2点卡稳定服务器,大话西游2:当年他承包兄弟们的点卡 如今找回了17年前的号...
  3. Unity学习笔记--2D单向平台制作方法
  4. 计算机考试面试硬件方面的知识,安徽公务员考试专业知识计算机类:计算机硬件系统的组成及其基本工作原理...
  5. 经典:CSS垂直居中的七种方法
  6. c语言中输入字符转换成整数,c语言数字字符串转换成整数 C语言中如何将数字变成字符串啊?...
  7. python 二重积分_python中求二维积分的方法
  8. 网速慢怎么回事 看看路由器旁边是否有这些东西
  9. 触摸事件中touchstar、touchmove、touchend、touchcancel事件应用方法及实例
  10. 蔬菜水果肉类奶制品厨房用具英语表达