API网关设计:
一种是常用的基于HTTP网络协议
另一种RPC调用(当下火的微服务spring cloud和之前的Dubbo框架)
不同系统之间互调时,为达到调用方确保被授权,需提供被调方要求的token
以下是百度API接口的token获取代码
public static void main(String[] args) {
String user_key = "d520c05ea2ab40568f119154ac7de67f"; //实际使用时客户需修改为自己的user_key
String user_secret = "825a1efa5b29c29272ae8a6c5286fdrf"; //实际使用时客户需修改为自己的user_secret
long timestamp = Integer.valueOf(String.valueOf(System.currentTimeMillis()/1000));
String data = user_key + timestamp;
String hmac = encode(data, user_secret);
System.out.println(hmac);
}
private static String toHexString(byte[] bytes) {
Formatter formatter = new Formatter();
for (byte b : bytes) {
formatter.format("%02x", b);
}
return formatter.toString();
}
private static String encode(String data, String key) {
String token = null;
try {
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
token = toHexString(mac.doFinal(data.getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
return token;
}
还有就是公司对应的java.security.*包中的UUID类
String tokenKey = UUID.randomUUID().toString().toLowerCase().replaceAll("-", "") + "|" + DateUtils.getTimestamp().getTime();
String newToken = UserPassword.getInstance().encrypt(tokenKey);
而token的获取也需要提供项目id和secret秘钥(id实际为事前分配给的,类似于百度的初测分配id)