跳到主要内容

6、自定义验证

说明
  1. 服务端action.json中的,RelayActionUrl中继SForwardActionUrl穿透SignInActionUrl信标,都可以设置支持HTTP POST的URL,当不为空时,这些操作都会发送HTTP POST请求到ActionUrl,并携带json参数,可用于自定义验证。
  2. Action验证中,设置静态参数,或者使用管理接口动态配置参数
  3. 优先采用动态参数,动态参数为空则使用页面配置的静态参数。
  4. HTTP POST返回ok表示验证成功,其余均为错误信息。

1.1、静态配置

Docusaurus Plushie

1.2、动态配置示例

以javascript 为例,设置参数方法:

const ws = new WebSocket(`ws://127.0.0.1:1803`, ['接口密钥']);
ws.onopen = () => {
const json = {Key:'token',Value:'snltty'}; //你的参数内容,json格式,任意内容,将原样post到ActionUrl
ws.send(JSON.stringify({
Path:'Action/SetArgs',//设置参数的接口
RequestId:1, //请求id,递增即可
Content: JSON.stringify(json) //json序列化为字符串内容
}));
}

1.3、结果示例

Docusaurus Plushie

1.4、额外数据

在以上图片可以看到,结果中,除了你自定义的字段,有一个JsonArg字段,此字段携带者一些额外的信息,这些信息的格式为

public sealed class JsonArgInfo
{
/// <summary>
/// 登入信息,每次都会携带
/// </summary>
public JsonArgSignInInfo Signin { get; set; }
/// <summary>
/// 中继信息,非中继验证时为null
/// </summary>
public JsonArgRelayInfo Relay { get; set; }
/// <summary>
/// 穿透信息,非穿透验证时为null
/// </summary>
public JsonArgSForwardInfo SForward { get; set; }
}
public sealed class JsonArgSignInInfo
{
/// <summary>
/// 设备id
/// </summary>
public string MachineId { get; set; } = string.Empty;
/// <summary>
/// 设备名
/// </summary>
public string MachineName { get; set; } = string.Empty;
/// <summary>
/// 设备所在机器的编号
/// </summary>
public string MachineKey { get; set; } = string.Empty;
/// <summary>
/// IP地址
/// </summary>
public IPAddress IPAddress { get; set; } = IPAddress.Any;
/// <summary>
/// 分组id
/// </summary>
public string GroupId { get; set; } = string.Empty;
}
public sealed class JsonArgRelayInfo
{
/// <summary>
/// 来源设备id
/// </summary>
public string FromMachineId { get; set; }
/// <summary>
/// 来源设备名
/// </summary>
public string FromMachineName { get; set; }
/// <summary>
/// 目标设备id
/// </summary>
public string RemoteMachineId { get; set; }
/// <summary>
/// 目标设备名
/// </summary>
public string RemoteMachineName { get; set; }
/// <summary>
/// 事务id
/// </summary>
public string TransactionId { get; set; }
/// <summary>
/// 协议名
/// </summary>
public string TransportName { get; set; }
/// <summary>
/// 流水id
/// </summary>
public ulong FlowingId { get; set; }
}
public sealed class JsonArgSForwardInfo
{
/// <summary>
/// 域名
/// </summary>
public string Domain { get; set; }
/// <summary>
/// 端口
/// </summary>
public int RemotePort { get; set; }
}