1.OAuth服务端需要引入pom
<dependency>
<groupId>com.whtygroupId>
<artifactId>whty-framework-oauthartifactId>
dependency>
2.项目必须配置redis,配置文件为cache.cfg
在需要进行OAuth权限校验的方法上加入注解
@RequiresOAuth
3.在客户端使用用户名和密码登陆时,使用${ucs_url}/rest/v1/oauth/password进行登录并获取token
请求参数包括:
- client_id:系统编码domainId
- client_secret:通信密钥
- username:用户名
- password:MD5密码
ucs会生成accessToken和refreshToken返回给客户端
返回参数包括:状态200-299成功,其他失败
- access_token
- refresh_token
- expires_in
JAVA使用下面的代码来发送请求
@Test
public void testCreateToken() {
Map<String, String> params = new HashMap<String, String>();
params.put("client_id", "0b7a6f616f61417d817c9b12d2325ce0");
params.put("client_secret", "5e063398b9da491b");
params.put("grant_type", "password");
params.put("response_type", "token");
params.put("username", "admin");
params.put("password", DigestsUtil.md5Hex("123456"));
String result = HttpUtil.doPost(accessTokenUrl, params);
System.out.println(result);
}
注:access_token过期时间1小时,refresh_token过期时间24小时,expires_in返回的为access_token过期时间,单位为秒。
4.发送其他请求时
服务端:服务端接口controller方法上加入@RequiresOAuth注解
客户端:
请求参数:
- access_token
- 其他正常调用接口所需参数
JAVA使用下面的代码来发送请求
@Test
public void testcheckUserByUsername(){
String uri = member_uri + "05";
Map<String, String> params = new HashMap<String, String>();
params.put("access_token", "171a78d53104fca629366c42c3e9806e");
params.put("domainId", "0b7a6f616f61417d817c9b12d2325ce0");
params.put("username", "admin");
String result = HttpUtil.doPost(uri, params);
System.out.println(result);
}
5、更新token
URL:${ucs_url}/rest/v1/oauth/password
请求参数包括:
- client_id:系统编码domainId
- client_secret:通信密钥
- refresh_token:用户名
- password:MD5密码客户端需在请求资源时需要根据expiresIn判断accessToken是否过期,如果过期需要调用更新token请求,如果refreshToken也过期,则需要重新发送token申请
代码如下:
@Test
public void testRefreshToken() {
Map<String, String> params = new HashMap<String, String>();
params.put("client_id", "0b7a6f616f61417d817c9b12d2325ce0");
params.put("client_secret", "5e063398b9da491b");
params.put("grant_type", "refresh_token");
params.put("response_type", "token");
params.put("refresh_token", "35012cc5787862d9f92f61550a097b50");
String result = HttpUtil.doPost(accessTokenUrl, params);
System.out.println(result);
}
6、错误处理
返回错误信息参数
- success
- msg
例子:
{“success”:false,”msg”:”access token 无效”}