1. ServiceController.cs
请求内容类型:
[HttpPost]
[Consumes("application/xml")] // 请求内容类型
1.获取客户端ip
var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
if (string.IsNullOrEmpty(ip))
{
ip = context.Connection.RemoteIpAddress.ToString();
}
2. LoginController.cs
解密
从指定的字符串加载 XML 文档。
// Create the XmlDocument.
XmlDocument doc = new XmlDocument();
doc.LoadXml("<item><name>wrench</name></item>");
获取用户数据:
“GetUserData”
获取用户系统信息 :
“GetUserSysData”
3. RegCenterController.cs
3.1 UserLogin(RegUserLogin reguser)授权登录
登录成功后,获取或设置用于管理此请求的用户会话数据的对象。
//Encoding.UTF8:获取 UTF-8 格式的编码。 GetBytes:将指定字符串中的所有字符编码为一个字节序列。
HttpContext.Session.Set("usercode", System.Text.Encoding.UTF8.GetBytes(mUserCode)); //mUserCode:账号
return RedirectToAction(nameof(Index)); //使用 actionName () Status302Found 重定向到指定的操作。
登录成功后,后续的请求头中带有参数:
Cookie: .AspNetCore.Session=CfDJ8E4uv7iyr91HrL%2BDe3iDEY0Y0FaG9q%2FrfrSE%2BwCcmPKHuhnj1%2Beqc5Cdi4l3C3BsjWBBCTcy8jygBJvZp46KTh4jV3v6vp1xRLcb91gzt58cme4hSRGWa6YlJ8%2BhiIIl1Yt4KZTYMWirFBlcDDhfVlDA27OYDUOiIa3c2qJXgZIY
判断是否带Cookie
byte[] mResult = null;
HttpContext.Session.TryGetValue("usercode", out mResult);
if (mResult == null) return RedirectToAction(nameof(UserLogin));
3.2 MacView()获取MAC
获取MAC
List<string> mMacList = new List<string>();
try
{
mMacList.Clear();
var networks = NetworkInterface.GetAllNetworkInterfaces(); //返回描述本地计算机上的网络接口的对象。
foreach (var network in networks)
{
if (network.NetworkInterfaceType == NetworkInterfaceType.Ethernet) //网络接口使用以太网连接
{
var physicalAddress = network.GetPhysicalAddress(); //返回此适配器的媒体访问控制 (MAC) 或物理地址。
string macAddressStr = string.Join(":", physicalAddress.GetAddressBytes().Select(b => b.ToString("X2")));
macAddressStr = macAddressStr.Replace("-", "").Replace(":", "").ToUpper();
if (!mMacList.Contains(macAddressStr))
{
mMacList.Add(macAddressStr);
}
Console.WriteLine(macAddressStr);
}
}
}
catch { }
return mMacList;
3.3 EditReg(RegData regdata)导入授权
3.3.1 获取授权
授权文件读取字符串,获取授权:
public static RegEntity f_CheckLicense(string pLicense, string pSignKey, ref string pErr)
把pLicense(base64字符串)还原,反序列化为RegEntity类(注册信息),获取MAC并验证是否与注册信息一致。
3.3.2 获取验签数据
将注册信息(RegEntity类)和程序注册签名密钥pSignKey(Startup.cs请求管道中已指定密钥)
public static string f_GetSingAture(RegEntity pRegEntity, string pSignKey)
验签字符串:机构名称+mac地址+系统类型和授权数+创建时间
string mRegEntityStr = ""; //验签字符串
//...拼接验签字符串
using (HMACSHA256 mac = new HMACSHA256(Encoding.UTF8.GetBytes(pSignKey)))
{
byte[] hash = mac.ComputeHash(Encoding.UTF8.GetBytes(mRegEntityStr));
signRet = Convert.ToBase64String(hash);
}
return mRegEntityStr;
判断验签字符串与注册信息(mRegEntity)的验签字符串是否一致:
if (mRegEntity.singature != mRegEntityStr) return; //不一致
return mRegEntity; //一致
3.3.3 修改或新增
判断iid是否存在,存在则修改,不存在则新增。
远程连接桌面:win+R,输入 mstsc
连接Windows Server 2008 R2,使用IIS部署 .NET Core项目。
应用池设置:
应用池高级设置:
网站编辑绑定:
修改http、https,端口等