当前位置: 首页 > news >正文

05 | 如何安全、快速地接入OAuth 2.0?

05 | 如何安全、快速地接入OAuth 2.0?

构建第三方软件应用

image.png

第一点,注册信息

小兔软件的研发人员提前登录到京东商家开放平台进行手动注册,以便后续使用这些注册的相关信息来请求访问令牌。兔软件需要先拥有自己的 app_id 和 app_serect 等信息,同时还要填写自己的回调地址 redirect_uri、申请权限等信息。

第二点,引导授权。

其实就是让用户为第三方软件授权,得到了授权之后,第三方软件才可以代表用户去访问数据。

第三点,使用访问令牌。

拿到令牌后去使用令牌,才是第三方软件的最终目的。
官方规范给出的使用访问令牌请求的方式,有三种,分别是:

  1. Form-Encoded Body Parameter(表单参数)
  2. URI Query Parameter(URI 查询参数)
  3. Authorization Request Header Field(授权请求头部字段)

建议你采用表单提交,也就是 POST 的方式来提交令牌,因为表单提交的方式在保证安全传输的同时,还不需要去额外处理 Authorization 头部信息。

String protectedURl="http://localhost:8082/ProtectedServlet-ch03";
Map<String, String> paramsMap = new HashMap<String, String>();paramsMap.put("app_id","APPID_RABBIT");
paramsMap.put("app_secret","APPSECRET_RABBIT");
paramsMap.put("token",accessToken);String result = HttpURLClient.doPost(protectedURl,HttpURLClient.mapToStr(paramsMap));

第四点,使用刷新令牌。

在小兔打单软件收到访问令牌的同时,也会收到访问令牌的过期时间 expires_in。一个设计良好的第三方应用,应该将 expires_in 值保存下来并定时检测;如果发现 expires_in 即将过期,则需要利用 refresh_token 去重新请求授权服务,以便获取新的、有效的访问令牌。

服务市场中的第三方应用软件

作为第三方开发者来构建第三方软件的时候,在授权码环节除了要接收授权码 code 值之外,还要接收用户的订购相关信息,比如服务的版本号、服务代码标识等信息。

构建受保护资源服务

比如说,访问头像的 API、访问昵称的 API。
基本都是以 Web API 为载体的形式进行。因此呢,当我们说受保护资源被授权服务保护着时,实际上说的是授权服务最终保护的是这些 Web API.
image.png

//不同的权限对应不同的操作
String[] scope = OauthServlet.tokenScopeMap.get(accessToken);StringBuffer sbuf = new StringBuffer();
for(int i=0;i<scope.length;i++){sbuf.append(scope[i]).append("|");
}if(sbuf.toString().indexOf("query")>0){queryGoods("");
}if(sbuf.toString().indexOf("add")>0){addGoods("");
}if(sbuf.toString().indexOf("del")>0){delGoods("");
}

不同的权限对应不同的数据。
如果小兔软件请求过来的一个访问令牌 access_token 的 scope 权限范围只对应了 Personal Data,那么包含该 access_token 值的请求就不能获取到 Contact 和 Like 的信息,关于这部分的代码,实际跟不同权限对应不同操作的代码类似。

不同的用户对应不同的数据。
多的场景却是基于用户属性的。还是以小兔打单软件为例,商家每次打印物流面单的时候,小兔打单软件都要知道是哪个商家的订单。这种情况下,商家为小兔软件授权,小兔软件获取的 access_token 实际上就包含了商家这个用户属性。

//不同的用户对应不同的数据
String user = OauthServlet.tokenMap.get(accessToken);
queryOrders(user);

image.png

总结

  1. 对于第三方软件,比如小兔打单软件来讲,它的主要目的就是获取访问令牌,使用访问令牌,这当然也是整个 OAuth 2.0 的目的,就是让第三方软件来做这两件事。在这个过程中需要强调的是,第三方软件在使用访问令牌的时候有三种方式,我们建议在平台和第三方软件约定好的前提下,优先采用 Post 表单提交的方式
  2. 受保护资源系统,比如小兔软件要访问开放平台的订单数据服务,它需要注意的是权限的问题,这个权限范围主要包括,不同的权限会有不同的操作,不同的权限也会对应不同的数据,不同的用户也会对应不同的数据

原文

http://www.lryc.cn/news/33673.html

相关文章:

  • nest.js学习笔记(一)
  • win下载配置CIC Flowmeter环境并提取流量特征
  • 【LeetCode刷题-Java/Python】二分查找
  • Linux 6.2 已正式发布
  • Kubernetes 101,第一部分,基础知识
  • 企业级信息系统开发学习笔记1.7 基于XML配置方式使用Spring MVC
  • java反射,动态代理
  • React(六):Redux的使用、react-redux简化代码、redux模块化、RTK的使用
  • 静态库和动态库的打包与使用
  • h264编码之SPS解析
  • 使用R语言包clusterProfiler做KEGG富集分析时出现的错误及解决方法
  • 框架——MyBatis的入门案例
  • hadoop兼容性验证
  • 运维提质增效,有哪些办法可以做
  • c++基础——结构体
  • applicationContext相关加载
  • 数据同步工具Sqoop
  • Kafka 版本
  • ElasticSearch 在Java中的各种实现
  • SpringBoot整合Knife4j
  • MyISAM和InnoDB存储引擎的区别
  • SpringMVC自定义处理多种日期格式的格式转换器
  • NYUv2生成边界GT(1)
  • Spring基本概念与使用
  • 安恒信息java实习面经
  • 第八章:枚举类与注解
  • Ceph介绍
  • remove 和 erase 的区别
  • NFTScan:怎么使用 NFT API 开发一个 NFT 数据分析平台?
  • ECOLOY直接更换流程表单后导致历史流程中数据为空白的解决方案