java oauth2.0 客户端_【oauth2.0】【2】JAVA 客户端模式

含义:用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题

步骤:

(A)客户端向认证服务器进行身份认证,并要求一个访问令牌(token)。

(B)认证服务器确认无误后,向客户端提供访问令牌。

(C)用令牌请求资源服务器的资源

摘要:

1,JAVA代码中访问

2,Postman中访问

3,Swagger中访问

正文:

1,JAVA代码中访问

我的环境是Spring Boot,实现代码:

pom.xml

org.apache.oltu.oauth2

org.apache.oltu.oauth2.client

0.31

OAuthClientUtil.java

public classOAuthClientUtil {private static Logger logger = LoggerFactory.getLogger(OAuthClientUtil.class.getName());//Config.ACCESS_TOKEN_URL 认证服务器获取token的地址;Config.OAUTH_USERNAME 账号;Config.OAUTH_PASSWORD:密码

public static String getApiToken()throwsOAuthProblemException{

logger.info("api getApiToken");

String accessToken= null;

OAuthClient oAuthClient= new OAuthClient(newURLConnectionClient());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();

}returnaccessToken;

}

}

Base64Util.java

public classBase64Util {//编码

public staticString 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();

}returnres;

}//解码

public staticString decode(String s) {if (s == null)return null;

BASE64Decoder decoder= newBASE64Decoder();try{byte[] b =decoder.decodeBuffer(s);return new String(b,"GBK");

}catch(Exception e) {return null;

}

}

}

使用授权访问接口

publicString 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();

}returnrespContent;

}

2,Postman中访问

Postman为模拟网络请求的工具,见参考博客2

51e70dbe268f05b333eb7d3f496db46d.png

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

20b08c350cf808ab035f238c8af6a8ca.png

3,Swagger中访问

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

795b11a23d2b659710a08cc58ae6d050.png

参考博客:

2,Oauth2授权模式访问之客户端模式(client_credentials)访问 - 面朝大海,春暖花开 - CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值