【oauth2.0】【2】JAVA 客户端模式
含义:用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题
步骤:
(A)客户端向认证服务器进行身份认证,并要求一个访问令牌(token)。
(B)认证服务器确认无误后,向客户端提供访问令牌。
(C)用令牌请求资源服务器的资源
摘要:
1,JAVA代码中访问
2,Postman中访问
3,Swagger中访问
正文:
1,JAVA代码中访问
我的环境是Spring Boot,实现代码:
pom.xml
<dependency>
<groupId>org.apache.oltu.oauth2</groupId>
<artifactId>org.apache.oltu.oauth2.client</artifactId>
<version>0.31</version>
</dependency>
OAuthClientUtil.java
public class OAuthClientUtil {
private static Logger logger = LoggerFactory.getLogger(OAuthClientUtil.class.getName());
//Config.ACCESS_TOKEN_URL 认证服务器获取token的地址;Config.OAUTH_USERNAME 账号;Config.OAUTH_PASSWORD:密码
public static String getApiToken()throws OAuthProblemException{
logger.info("api getApiToken");
String accessToken = null;
OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient());
try {
OAuthClientRequest request = OAuthClientRequest
.tokenLocation(Config.ACCESS_TOKEN_URL)
.setGrantType(GrantType.CLIENT_CREDENTIALS)
.setUsername(Config.OAUTH_USERNAME)
.setPassword(Config.OAUTH_PASSWORD)
.buildQueryMessage();
request.addHeader("Accept", "application/json");
request.addHeader("Content-Type", "application/json");
String auth = Base64Util.encode(Config.OAUTH_USERNAME + ':' + Config.OAUTH_PASSWORD);
request.addHeader("Authorization", "Basic " + auth);
OAuthAccessTokenResponse oAuthResponse = oAuthClient.accessToken(request, OAuth.HttpMethod.POST); //去服务端请求access_token,并返回响应
accessToken = oAuthResponse.getAccessToken(); //获取服务端返回过来的access_token
logger.info("api token: " + accessToken);
} catch (OAuthSystemException e) {
e.printStackTrace();
}
return accessToken;
}
}
Base64Util.java
public class Base64Util {
//编码
public static String encode(String s) {
if (s == null)
return null;
String res = "";
try {
res = new sun.misc.BASE64Encoder().encode(s.getBytes("GBK"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
//解码
public static String decode(String s) {
if (s == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(s);
return new String(b,"GBK");
} catch (Exception e) {
return null;
}
}
}
使用授权访问接口
public String scanTrainQrode(String param) {
String respContent = ""; //返回的内容
String apiToken = null;
try {
apiToken = OAuthClientUtil.getApiToken(); //获取token
String requestUrl = String.format(Config.URL, param, apiToken); //拼接接口地址(例:https://cn.bing.com?param=param&api_token=apiToken)
String result = HttpHelper.SendPOST(requestUrl); //访问接口地址
if (StringUtils.isNotBlank(result)) { //解析返回的结果
JSONObject jsonObject = JSONObject.fromObject(result);
if(jsonObject.containsKey("msg")) respContent = jsonObject.getString("msg");
}
} catch (OAuthProblemException e) {
e.printStackTrace();
}
return respContent;
}
2,Postman中访问
Postman为模拟网络请求的工具,见参考博客2

-------------------------------------------

3,Swagger中访问
value中填写bearer + 空格 + token(例:bearer 49305daf-e566-4f9d-8f83-e74af5ae47e1)

参考博客:
1,Java的oauth2.0 服务端与客户端的实现 - jing12062011的博客 - CSDN博客
https://blog.csdn.net/jing12062011/article/details/78147306
2,Oauth2授权模式访问之客户端模式(client_credentials)访问 - 面朝大海,春暖花开 - CSDN博客
https://blog.csdn.net/u013887008/article/details/80574905
【oauth2.0】【2】JAVA 客户端模式的更多相关文章
- OAuth2.0 四种授权模式
OAuth2.0简单笔记(四种授权模式) 金天:坚持写东西,不是一件容易的事,换句话说其实坚持本身都不是一件容易的事.如果学习有捷径,那就是不断实践,不断积累.写笔记,其实是给自己看的,是体现积累的一 ...
- Oauth2.0认证---授权码模式
目录: 1.功能描述 2.客户端的授权模式 3.授权模式认证流程 4.代码实现 1.功能描述 OAuth在"客户端"与"服务提供商"之间,设置了一个授权层(au ...
- SpringBoot之OAuth2.0学习之客户端快速上手
2.1.@EnableOAuth2Sso 这个注解是为了开启OAuth2.0的sso功能,如果我们配置了WebSecurityConfigurerAdapter,它通过添加身份验证过滤器和身份验证(e ...
- ElasticSearch6.5.0 【Java客户端之REST Client】
说明 High Level Client 是基于 Low Level Client 的.官方文档如下: * https://www.elastic.co/guide/en/elasticsearch/ ...
- ElasticSearch6.5.0【Java客户端之TransportClient】
说明 TransportClient:网上流传最多的客户端,目前最新版本 Java REST Client:官方推荐的客户端, 官方:我们要在Elasticsearch 7.0的版本中不赞成使用Tra ...
- 入门教程:.NET开源OpenID Connect 和OAuth解决方案IdentityServer v3 创建简单的OAuth2.0服务器,客户端和API(三)
本教程的目的在于创造尽可能简单的identityserver安装作为一个oauth2授权服务器.这应该能够让你了解一些基本功能和配置选项(完整的源代码可以发现在这里).在后面的文档中会介绍更多的高级功 ...
- IdentityServer4实现Oauth2.0四种模式之隐藏模式
接上一篇:IdentityServer4实现OAuth2.0四种模式之密码模式,密码模式将用户的密码暴露给了客户端,这无疑是不安全的,隐藏模式可以解决这个问题,由用户自己在IdentityServ ...
- 使用微服务架构思想,设计部署OAuth2.0授权认证框架
1,授权认证与微服务架构 1.1,由不同团队合作引发的授权认证问题 去年的时候,公司开发一款新产品,但人手不够,将B/S系统的Web开发外包,外包团队使用Vue.js框架,调用我们的WebAPI,但是 ...
- API代理网关和OAuth2.0授权认证框架
API代理网关和OAuth2.0授权认证框架 https://www.cnblogs.com/bluedoctor/p/8967951.html 1,授权认证与微服务架构 1.1,由不同团队合作引发的 ...
随机推荐
- hihoCoder week12 刷油漆
题目链接: https://hihocoder.com/contest/hiho12/problem/1 给出一棵树 每个节点的价值 求以1为根的树中,选取m个相联通的节点的最大价值和 #includ ...
- 题解——Codeforces Round #508 (Div. 2) T3 (贪心)
贪心的选取最优解 然后相减好 记得要开long long #include <cstdio> #include <algorithm> #include <cstring ...
- CommandLineParser命令行解析类
目的:方便用户在命令行使用过程中减少工作量 以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入的参数格式要与代码中的if语句判断内容格式一样,一不小心就输 ...
- 原生JS取代一些JQuery方法的简单实现
原生JS取代一些JQuery方法的简单实现 下面小编就为大家带来一篇原生JS取代一些JQuery方法的简单实现.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1.选 ...
- 后台返回数据判断是http还是后台本地图片 indexOf
今天的笔记呢,记录一下 其实这个应该后台去判断的,但是因为某种原因,今天我们前台做一下判断 事情是这样的,后台返回我一个url 这个url有的http开头的 也有他后台本地的例如:/img/1.pn ...
- 详解JS中DOM 元素的 attribute 和 property 属性
一.'表亲戚':attribute和property 为什么称attribute和property为'表亲戚'呢?因为他们既有共同处,也有不同点. attribute 是 dom 元素在文档中作为 h ...
- tomcat热部署.class
本人是在维护公司系统时遇到的问题,由于公司的系统是部署到客户服务器上,而系统中存在的问题又比较多,需要经常维护.如果每次修改完class文件后都需要去重启服务器, 那会给用户的使用造成不便,所以需要使 ...
- module.exports小程序模块化,require
小程序模块化 可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块.模块只有通过 module.exports 或者 exports 才能对外暴露接口. tips:exports 是 mo ...
- RedHat/CentOS根目录扩容
下面以redhat为例,介绍如何扩容系统根目录,CentOS也是一样的. 1. 登录到系统中,查看硬盘情况. /dev/sdb就是增加的硬盘. [root@test ~]# fdisk -l 2. 操 ...
- JAVA基础知识总结:十七
一.转换流 作用:实现将字节流转换为字符流 a.InputStreamReader:字节字符转换输入流:字节输入流----->字符输入流 b.OutputStreamWriter:字节字符转换输 ...