feat(ssf): 实现安全事件一键连接与凭据托管
新增数据库驱动的 SecurityEventConnectionManager,复用 RFC 7662 机器 Client,自动完成 Discovery、Push Bearer 生成、Stream 创建、Verification、首次启用、零停机轮换和安全退役。 增加文件与 Kubernetes SecretStore、最小权限 RBAC、动态 Receiver/撤销水位/内省降级,以及系统设置管理页面。已通过全量 Go 测试、go vet、关键包竞态测试、27 个 Web 测试、类型检查、生产构建、Compose 和 Kubernetes dry-run。
This commit is contained in:
@@ -43,6 +43,7 @@ import type {
|
||||
RateLimitWindow,
|
||||
RuntimePolicySet,
|
||||
RuntimePolicySetUpsertRequest,
|
||||
SecurityEventConnectionResponse,
|
||||
UserGroup,
|
||||
UserGroupUpsertRequest,
|
||||
WalletAdjustmentResponse,
|
||||
@@ -1000,6 +1001,40 @@ export async function updateClientCustomizationSettings(
|
||||
});
|
||||
}
|
||||
|
||||
const securityEventConnectionPath = '/api/admin/system/identity/security-events/connection';
|
||||
|
||||
export async function getSecurityEventConnection(token: string): Promise<SecurityEventConnectionResponse> {
|
||||
return request<SecurityEventConnectionResponse>(securityEventConnectionPath, { token });
|
||||
}
|
||||
|
||||
export async function connectSecurityEventTransmitter(token: string, transmitterIssuer: string): Promise<SecurityEventConnectionResponse> {
|
||||
return request<SecurityEventConnectionResponse>(securityEventConnectionPath, {
|
||||
body: { transmitter_issuer: transmitterIssuer }, method: 'PUT', token,
|
||||
headers: { 'Idempotency-Key': `ssf-connect-${crypto.randomUUID()}` },
|
||||
});
|
||||
}
|
||||
|
||||
export async function verifySecurityEventConnection(token: string, version: number): Promise<SecurityEventConnectionResponse> {
|
||||
return securityEventConnectionWrite(token, '/verify', version, 'POST', 'verify');
|
||||
}
|
||||
|
||||
export async function rotateSecurityEventConnectionCredential(token: string, version: number): Promise<SecurityEventConnectionResponse> {
|
||||
return securityEventConnectionWrite(token, '/rotate-credential', version, 'POST', 'rotate');
|
||||
}
|
||||
|
||||
export async function disconnectSecurityEventConnection(token: string, version: number): Promise<SecurityEventConnectionResponse> {
|
||||
return securityEventConnectionWrite(token, '', version, 'DELETE', 'disconnect');
|
||||
}
|
||||
|
||||
function securityEventConnectionWrite(token: string, suffix: string, version: number, method: string, action: string) {
|
||||
return request<SecurityEventConnectionResponse>(securityEventConnectionPath + suffix, {
|
||||
method, token, headers: {
|
||||
'Idempotency-Key': `ssf-${action}-${crypto.randomUUID()}`,
|
||||
'If-Match': `W/"${version}"`,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export async function getPublicClientCustomization(): Promise<ClientCustomizationSettings> {
|
||||
return request<ClientCustomizationSettings>('/api/v1/public/client-customization', { auth: false });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user