Skip to content

请求安全验证

Henry edited this page Oct 12, 2019 · 1 revision

组件是基于接口的方式来描述通讯交互,在面对请求的可靠性验证的时候,在每个方法行为都添加一个凭证参数那在设计和规划上就非常麻烦了。组件的通讯协议是支持头部附加信息,可以通过头部附加信息结合过虑器即可完成相关请求有效性验证。

制定验证过虑器

    public class Token : ActionFilterAttribute
    {
        public override bool Executing(EventCenter center, EventActionHandler handler, IEventInput input, IEventOutput output)
        {
            input.Properties.TryGetValue("token", out string token);
            if (token == "admin")
            {
                return base.Executing(center, handler, input, output);
            }
            else
            {
                output.EventError = EventError.InnerError;
                output.Data = new object[] { "操作用户无效!" };
                return false;
            }
        }
    }

以上过虑器是验证头部是否包括token信息,并检测值是否为admin;如果是则继续执行,否则返回一个不可操作的提示。实际应用中验证方式会相对复杂些如签要加上时间和key来进行哈希对比等。

使用过虑器

    [Token]
    [Service(typeof(IUserService))]
    public class UserService : IUserService

可以把过虑器添加到控制器或方法上。

客户端设置

    var api = client.Create<IUserService>();
    ((IHeader)api).Header["token"] = "admin";

所有创建的接口代理都会自动实现IHeader接口,通过Header属性添加相关值即可;添加的头信息会附加到该接口的所有请求方法中。