CSFrameworkV6旗舰版开发框架 - 集成软件授权认证系统
CSFrameworkV6旗舰版开发框架 - 集成软件授权认证系统
一、概述
软件客户证书
登记软件客户,使用管理员工具制作2种软件客户证书:
- 在线用户数授权证书(包含客户编码、客户名称、软件到期日期、在线用户参数配置等信息)
- MAC地址证书(保护MAC地址、软件到期日期等信息)
证书与认证逻辑关系
在线用户并发数授权逻辑关系
系统记录用户登入、登出历史记录,包括用户编码、用户电脑MAC地址、用户在线状态等信息。
在校验证书时,统计在线用户数量与证书允许的在线用户数做比较。
两种认证策略
策略1:在线用户并发数+软件过期时间控制
表名:sys_UserLicenseOnlineConcurrency
证书识别码(软件客户编码), 对应CustomerCode字段。
策略2:MAC白名单+软件过期时间控制
表名:sys_UserLicenseWhitelist
证书识别码(获取电脑的mac地址)
两种联机认证(在线认证)方式
数据库直连模式
dalUser.ValidateLicense方法:
/// <summary>
/// 校验软件证书
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public LicenseValidateResult ValidateLicense(LicenseValidateRequest input)
{
//省略代码......
}
WebAPI方式
SystemSecurityController控制器 ValidateLicense 接口:
[AllowAnonymous]// 登录界面调用,无token
[HttpPost]
public LicenseValidateResult ValidateLicense(LicenseValidateRequest input)
{//OK
return _business.ValidateLicense(input);
}
参考文章
C/S开发框架两种后台连接:直连模式与WebApi模式(ADODirect与WebApi)
二、使用VS2022集成软件授权功能
CSFrameworkV6.1开发框架已集成软件授权功能,下面的内容提示您修改了那些内容,方便您快速了解软件集成。
VS Project引用DLL库
- CSFramework.LicenseCore - 核心库(.NET8版本)
- CSFramework.LicenseCoreWindows - 核心库(.NET8 Windows版本)
<Reference Include="CSFramework.LicenseCore">
<HintPath>..\Debug\net8.0-windows\CSFramework.LicenseCore.dll</HintPath>
</Reference>
<Reference Include="CSFramework.LicenseCoreWindows">
<HintPath>..\Debug\net8.0-windows\CSFramework.LicenseCoreWindows.dll</HintPath>
</Reference>
Program.cs 启用软件授权认证功能
启用软件用户认证
在程序入口,启用软件用户认证:
//不启用软件用户认证
LicenseManager.Options.UseLicense = false;
//启用软件用户认证
LicenseManager.Options = new ClientAppConfig
{
UseLicense = true,//启用软件认证
SystemCode = "CSFrameworkV6",//ERP/MES,您的软件编码或名称
//LicenseStrategyType = LicenseStrategyType.OnlineUser, //策略1:在线用户并发数+软件过期时间控制
//LicenseId = "www.csframework.com", //证书识别码
LicenseStrategyType = LicenseStrategyType.MacWhitelist,//策略2:MAC白名单+软件过期时间控制
LicenseId = NetTools.GetLocalMac(),//获取电脑的mac地址
};
ClientAppConfig 类
/// <summary>
/// 客户端程序应用配置,用于实例化软件授权策略
/// </summary>
public class ClientAppConfig
{
/// <summary>
/// 是否启用软件证书。如果启用,用户登录或数据操作校验证书信息。
/// </summary>
public bool UseLicense { get; set; } = false;
/// <summary>
/// 您的软件系统编码,如:ERP/MES/HIS
/// </summary>
public string SystemCode { get; set; }
/// <summary>
/// 证书唯一识别码(软件客户编码或MAC地址)
/// </summary>
public string LicenseId { get; set; }
/// <summary>
/// 策略类型(在线用户数策略、mac白名单策略)
/// </summary>
public LicenseStrategyType LicenseStrategyType { get; set; } = LicenseStrategyType.MacWhitelist;
}
软件认证
当用户进行操作时执行一次软件认证,如:增、删、改、查或系统登录操作。
AssertLicense 方法
在frmBase基类窗体定义AssertLicense 方法,然后在派生类调用 AssertLicense 方法,实时检测证书是否有效、软件是否过期。
/// <summary>
/// 证书认证
/// </summary>
/// <param name="failedMessage">认证失败默认消息</param>
/// <exception cref="Exception"></exception>
protected virtual void AssertLicense(string failedMessage = "证书认证失败!")
{
bool isValid = LicenseValidation.Validate(LicenseManager.CurrentLicense, out var errMsg);
if (isValid == false)
{
throw new BizException(failedMessage + errMsg);
}
}
下面是开发框架提供软件认证方法:
用户登录校验证书
用户登录时校验证书。
frmLogin用户登录窗体的【登录】按钮的Click事件:
private void btnLogin_Click(object sender, EventArgs e)
{
this.AssertLicense();
//省略代码......
}
数据窗体基类增、删、改三个按钮事件校验证书
/// <summary>
/// 新增记录
/// </summary>
/// <param name="sender"></param>
public virtual void DoAdd(IButtonInfo sender)
{
this.AssertLicense();
//省略代码......
}
/// <summary>
/// 修改数据
/// </summary>
/// <param name="sender"></param>
public virtual void DoEdit(IButtonInfo sender)
{
this.AssertLicense();
//省略代码......
}
/// <summary>
/// 删除记录
/// </summary>
/// <param name="sender"></param>
public virtual void DoDelete(IButtonInfo sender)
{
this.AssertLicense();
//省略代码......
}
查询数据(业务单据界面)
如采购订单【查询】按钮校验证书:
private void btnQuery_Click(object sender, EventArgs e)
{
this.AssertLicense();
//省略代码......
}
保存数据(业务单据界面)
如采购订单【保存】按钮校验证书:
public override void DoSave(IButtonInfo sender)// 保存数据
{
this.AssertLicense();//校验证书
//省略代码......
}
实时更新在线用户清单(UpdateOnlineCache方法)
调用 UpdateOnlineCache 方法目的是更新FlagOnline状态。
- Y:在线(用户登录)
- N:离线(用户登出)
- F:闲置(如15分钟没有任何操作自动设置离线)
打开dalUser.cs文件,Login/Logout两个方法调用 UpdateOnlineCache 方法。
打开dalBase.cs文件,Update<>方法调用 UpdateOnlineCache 方法。
三、修改为.NET7版本
CSFrameworkV6.1已升级到.NET8版本,配套的授权系统默认为.NET8版本,如果您的项目采用CSFrameworkV6.0或.NET7,需要降配。
修改目标框架(TargetFramework)
请按下面步骤修改4个Project的目标框架:
修改Nuget包版本
修改4个Project的Nuget包版本,改为7.0版本,具体的版本号与您的项目相同即可。
四、其他
查看证书
主窗体任务栏右下角,点击【软件证书】按钮:
《用户操作手册》
参考:CSFramework.Authentication 软件授权认证系统 用户操作手册。
https://www.cscode.net/archive/csframeworkv6/622165775466501.html