java接口安全怎么处理_Restful API 接口安全性设计
1.API接口設計規范
2.安全性設計
a.白名單限制
僅接受特定系統的請求響應,調用方的IP地址需要在本系統中報備,否則無法調用
b.合法身份合法性驗證
Basic Authentication :這種方式是直接將用戶名和密碼放到Header中,使用 Authorization: Basic Zm9vOmJhcg== ,使用最簡單但是最不安全。
TOKEN認證:這種方式也是再HTTP頭中,使用 Authorization: Bearer ,使用最廣泛的TOKEN是JWT,通過簽名過的TOKEN。
Json web token (JWT), 是為了在網絡應用環境間傳遞聲明而執行的一種基于JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。
類似JWT,只是用戶登錄成功后將token信息是保存在redis中,可以設置token有效期,或主動將token失效等,并返回給用戶。
其他認證接口時必須在header中輸入token信息,并驗證。
@Aspect
@Component
public class SecurityAspect {
@Resource(name = "redisTokenManager")
private TokenManager tokenManager;
@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
public void controllerAspect() {
}
/**
* 接收到客戶端請求時執行
*
* @param pjp
* @return
* @throws Throwable
*/
@Around("controllerAspect()")
public Object execute(ProceedingJoinPoint pjp) throws Throwable {
// 從切點上獲取目標方法
MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
Method method = methodSignature.getMethod();
/**
* 驗證Token
*/
if (method.isAnnotationPresent(TokenSecurity.class)) {
// 從 request header 中獲取當前 token
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
String token = request.getHeader(Constant.DEFAULT_TOKEN_NAME);
if (StringUtils.isEmpty(token)) {
throw new TokenException("客戶端X-Token參數不能為空,且從Header中傳入,如果沒有登錄,請先登錄獲取Token");
}
// 檢查 token 有效性
if (!tokenManager.checkToken(token)) {
String message = String.format("Token [%s] 非法", token);
throw new TokenException(message);
}
}
// 調用目標方法
return pjp.proceed();
}
}
OAuth2.0: 這種方式安全等級最高,- 但是也是最復雜的。如果不是大型API平臺或者需要給第三方APP使用的,沒必要整這么復雜。
c.流量控制可借助Guava中對應RateLimiter模塊功能,也可借助Redis高效響應機制自己設計,以調用方id+接口名稱為KEY,設置接口調用上限即可,按天實時更新數據增量。
限流控制:主要用于服務的請求頻率限制,避免由于服務吞吐量跟不上造成上層調用請求堆積過大而導致服務垮掉甚至應用奔潰問題。目前提供了單機版? ? ? ? 限流和分布式限流功能。簡而言之,通過限流控制,我們可以在方法級別的粒度控制到在XXX秒內最多接收XXX次調用。
并發控制:與限流控制類似,并發控制更加強調的是并發量。該功能能夠保證服務在任何時刻的并發量控制。目前提供了單機和分布式兩個版本的并發控? ? ? ? ? ? 制。簡而言之,通過并發控制,我們可以在方法級別的粒度控制到某個服務同時間最多不能超過XXX次請求被調用。
總結
以上是生活随笔為你收集整理的java接口安全怎么处理_Restful API 接口安全性设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java单链表 提供增删改查_java实
- 下一篇: java圆形排列_位图排序java版