package com.vincent.rsf.openApi.security.service;
|
|
import com.vincent.rsf.openApi.entity.app.App;
|
import com.vincent.rsf.openApi.service.AppService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
|
/**
|
* App认证服务
|
*
|
* 提供AppId和AppSecret的验证功能
|
*
|
* @author vincent
|
* @since 2026-01-05
|
*/
|
@Slf4j
|
@Service
|
public class AppAuthService {
|
|
@Resource
|
private AppService appService;
|
|
/**
|
* 验证AppId和AppSecret
|
*
|
* @param appId 应用ID
|
* @param appSecret 应用密钥
|
* @return 验证结果
|
*/
|
public boolean validateApp(String appId, String appSecret) {
|
log.debug("验证AppId: {}, AppSecret: ****", appId);
|
|
if (appId == null || appSecret == null) {
|
log.warn("AppId或AppSecret为空");
|
return false;
|
}
|
|
try {
|
// 从数据库查询应用信息
|
App app = appService.getById(appId);
|
if (app == null) {
|
log.warn("未找到应用: {}", appId);
|
return false;
|
}
|
|
// 检查应用是否启用
|
if (app.getEnable() != 1) {
|
log.warn("应用未启用: {}", appId);
|
return false;
|
}
|
|
// 验证密钥
|
boolean isValid = appSecret.equals(app.getScrect());
|
if (!isValid) {
|
log.warn("AppSecret验证失败: AppId={}", appId);
|
} else {
|
log.info("AppId认证成功: AppId={}", appId);
|
}
|
|
return isValid;
|
} catch (Exception e) {
|
log.error("验证AppId和AppSecret时发生异常", e);
|
return false;
|
}
|
}
|
|
public boolean validateApp(String appId) {
|
App app = appService.getById(appId);
|
return app != null;
|
}
|
|
/**
|
* 获取应用信息
|
*
|
* @param appId 应用ID
|
* @return 应用信息
|
*/
|
public App getAppInfo(String appId) {
|
if (appId == null) {
|
return null;
|
}
|
|
try {
|
return appService.getById(appId);
|
} catch (Exception e) {
|
log.error("获取应用信息失败: {}", appId, e);
|
return null;
|
}
|
}
|
|
/**
|
* 生成AppToken(可选功能)
|
*
|
* @param appId 应用ID
|
* @param appSecret 应用密钥
|
* @return 生成的Token
|
*/
|
public String generateAppToken(String appId, String appSecret) {
|
// 这里可以实现基于AppId和AppSecret的Token生成逻辑
|
// 例如使用JWT生成Token
|
if (validateApp(appId, appSecret)) {
|
// 生成Token的逻辑
|
long timestamp = System.currentTimeMillis();
|
String tokenData = appId + ":" + timestamp;
|
// TODO:这里可以使用更安全的加密算法
|
return java.util.Base64.getEncoder().encodeToString(tokenData.getBytes());
|
}
|
return null;
|
}
|
}
|