第三方程序接口的提供

简单记录一下和第三方对接的文件的上传下载验证设计


工作以来还是第一次做这种加密和验证类的程序设计,初版应该还有很多不足,简单总结一下,方便后续的回顾和迭代。

拿到这个需求后我能考虑到的点有以下几个

1、登录验证机制。

2、密码传输的加密措施

3、多线程安全和程序的可复用可扩展。

设计思路如下

用户发送请求——服务端返回公钥

用户对密码进行加密——登录验证请求——返回token

用户存储token并携带再请求头中——上传和下载。

其中应用到的主要技术有 :

1、RSA算法加密

2、MD5算法签名认证加密

3、JWT的token生成和验证机制

4、spring基础应用

RSA算法总结过了不再赘述,MD5加密技术也比较老也不赘述了

这里总结一下JWT的token实现机制

1、生成一个秘钥

2、生成token

/**

* 生成token,该方法只在用户登录成功后调用

*

* @param Map集合,可以存储用户id,token生成时间,token过期时间等自定义字段

* @return token字符串,若失败则返回null

*/

public static String createToken(Map payload) {

String tokenString = null;

// 创建一个 JWS object

JWSObject jwsObject = new JWSObject(header, new Payload(new JSONObject(payload)));

try {

// 将jwsObject 进行HMAC签名

jwsObject.sign(new MACSigner(SECRET));

tokenString = jwsObject.serialize();

} catch (JOSEException e) {

System.err.println("签名失败:" + e.getMessage());

e.printStackTrace();

}

return tokenString;

}

3、验证token

/**

* 校验token是否合法,返回Map集合,集合中主要包含 state状态码 data鉴权成功后从token中提取的数据

* 该方法在过滤器中调用,每次请求API时都校验

*

* @param token

* @return Map

*/

public static Map validToken(String token) {

Map resultMap = new HashMap();

try {

JWSObject jwsObject = JWSObject.parse(token);

Payload payload = jwsObject.getPayload();

JWSVerifier verifier = new MACVerifier(SECRET);

if (jwsObject.verify(verifier)) {

JSONObject jsonOBj = payload.toJSONObject();

// token校验成功(此时没有校验是否过期)

resultMap.put("state", TokenState.VALID.toString());

// 若payload包含ext字段,则校验是否过期

if (jsonOBj.containsKey("ext")) {

long extTime = Long.valueOf(jsonOBj.get("ext").toString());

long curTime = new Date().getTime();

// 过期了

if (curTime > extTime) {

resultMap.clear();

resultMap.put("state", TokenState.EXPIRED.toString());

}

}

resultMap.put("data", jsonOBj);

} else {

// 校验失败

resultMap.put("state", TokenState.INVALID.toString());

}

} catch (Exception e) {

// e.printStackTrace();

// token格式不合法导致的异常

resultMap.clear();

resultMap.put("state", TokenState.INVALID.toString());

}

return resultMap;

}

这里进行一下思路的扩展

1、加密

你可能感兴趣的:(第三方程序接口的提供)