iXserverLoopEnv/db/abp/loop_patch.sql

55 lines
3.1 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

-- iCONAbpFX 的闭环补丁:库从 staging 拷来后执行一次(loop.ps1 reset-abp -Init),之后 BACKUP 到实例默认备份目录留底。
--
-- 签名密钥不在库里:ABP 用 AddDeveloperSigningCredential,从宿主目录的 tempkey.jwk 读,
-- 没有就生成。loop.ps1 deploy 会删掉发布目录里的 tempkey.*,让本机生成一把只在 run\abp 里的新密钥,
-- 所以闭环签出的 token 在 staging / 生产都验不过。(方案 v4 §2.1 以为密钥入库,实际不是。)
--
-- 这里只换三样凭据,让闭环不必知道 staging 的明文:
-- setsail 的 client secret → loop-setsail-secret
-- FX_App 的 client secret → loop-fxapp-secret
-- admin 的密码(iXserver 用 FX_App + password 授权取模板)→ Loop@123456
-- 明文都在 config\loop.psd1 里,是闭环专用的假值。
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
------------------------------------------------------------------------------------------------
-- 1. setsail 的 secret:IdentityServer4 存的是 Base64(SHA256(UTF8(secret)))
------------------------------------------------------------------------------------------------
DECLARE @setsail UNIQUEIDENTIFIER = (SELECT Id FROM dbo.IdentityServerClients WHERE ClientId = N'setsail');
IF @setsail IS NULL THROW 50001, N'iCONAbpFX 里没有 setsail client,库是不是从 staging 拷的?', 1;
DELETE FROM dbo.IdentityServerClientSecrets WHERE ClientId = @setsail;
INSERT INTO dbo.IdentityServerClientSecrets (ClientId, Type, Value, Description, Expiration)
VALUES (@setsail, N'SharedSecret', N'ooFrp78vixE5Hq+OfnE3FXBedZPUiT8mjNzICr2EB80=', N'loop env', NULL);
-- FX_App 同理
DECLARE @fxapp UNIQUEIDENTIFIER = (SELECT Id FROM dbo.IdentityServerClients WHERE ClientId = N'FX_App');
IF @fxapp IS NULL THROW 50003, N'iCONAbpFX 里没有 FX_App client', 1;
DELETE FROM dbo.IdentityServerClientSecrets WHERE ClientId = @fxapp;
INSERT INTO dbo.IdentityServerClientSecrets (ClientId, Type, Value, Description, Expiration)
VALUES (@fxapp, N'SharedSecret', N'4wsAVCVjGIuA3sm8w1VV1yvrlD9+nrONjlWXabX6cJw=', N'loop env', NULL);
------------------------------------------------------------------------------------------------
-- 2. admin 的密码:ASP.NET Core Identity V3 格式(HMACSHA256,10000 次,16 字节盐)
-- 盐是固定的 'loop-env-salt-01',补丁可重复执行、结果不变
------------------------------------------------------------------------------------------------
IF NOT EXISTS (SELECT 1 FROM dbo.AbpUsers WHERE UserName = N'admin' AND TenantId IS NULL)
THROW 50002, N'iCONAbpFX 里没有 host 的 admin 用户', 1;
UPDATE dbo.AbpUsers
SET PasswordHash = N'AQAAAAEAACcQAAAAEGxvb3AtZW52LXNhbHQtMDHzcKLvk4EOtgWerM+7p4SzG/uo/xPnsQw7mAP1Jo6Gvw==',
SecurityStamp = CONVERT(NVARCHAR(36), NEWID()),
AccessFailedCount = 0,
LockoutEnd = NULL
WHERE UserName = N'admin' AND TenantId IS NULL;
COMMIT TRANSACTION;
SELECT c.ClientId, c.Enabled, c.AccessTokenLifetime,
(SELECT COUNT(*) FROM dbo.IdentityServerClientSecrets s WHERE s.ClientId = c.Id) AS secrets
FROM dbo.IdentityServerClients c
WHERE c.ClientId IN (N'setsail', N'FX_App');