1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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;
    }
}