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; } }