BeetleX.FastHttpApi之JWT和自定义访问验证

        BeetleX.FastHttpApi.Jwt组件是BeetleX.FastHttpApi的JWT安全验证插件,通组件的简单配置即可以实现对webapi进行安全访问控制。接下来介绍如何使用这组件并和其他自定义验证兼容。

使用

        本示例需要引用两个组件分别是:BeetleX.FastHttpApi.Hosting和BeetleX.FastHttpApi.Jwt。前者是简单托管服务构建,后者则是JWT验证。引用组件后可以在main访问编写以下代码

class Program
{
    static void Main(string[] args)
    {
        var builder = new HostBuilder()
            .ConfigureServices((hostContext, services) =>
            {
                services.UseBeetlexHttp(o =>
                {
                    o.LogToConsole = true;
                    o.LogLevel = BeetleX.EventArgs.LogType.Warring;
                    o.Port = 80;
                    o.SetDebug();
                },
                (http) =>
                {
                    http.UseJWT();
                },
                typeof(Program).Assembly);
            });
        builder.Build().Run();
    }
}

通过HttpApiServer对象的UseJWT方法开启相关验证,当开户后所有控制器访问都必须获取JWT许可(包括cookie或头部Authorization包括相关凭证)。

控制器

        当开启JWT后默认情况下控制器所有方法都需要经过验证,但可以通过组件提供的Attribute来更改相关验证方式。

    [Controller]
    public class Home
    {
        [AuthMark(AuthMarkType.NoValidation)]
        public bool Login(string name, string pwd, IHttpContext context)
        {
            var result = (name == "admin" && pwd == "123456");
            if (result)
                context.SetAdminJwtToken(name);
            return result;
        }
        [AuthMark(AuthMarkType.Admin)]
        public object List()
        {
            return Northwind.Data.DataHelper.Defalut.Employees;
        }
    }

可以通过[AuthMark(AuthMarkType.NoValidation)]标记方法或整个API不进行验证处理。还可以通过 [AuthMark(AuthMarkType.Admin)]来标记方法访问的角色必须是admin。以上代码是把Login标记为不需要验证,然后在方法中调用SetAdminJwtToken或SetJwtToken方法来设置当前会话的登陆凭证。

其他验证

        有时候希望个别API兼容其他验证方式,这个时候可以在UseJWT转入一个处理函数。

http.UseJWT((o, e) =>
{
    var token = e.HttpContext.Data["token"];
    if (token != null)
    {
        if (token == "admin")
        {
            e.Success();
        }
        else
        {
            e.Failure("当前凭证无效!");
        }
    }
});

可以在方法中调用Success或Failure来告诉组件自定义验证情况,如果这两个方法都不调用的情况下会路由回默认的JWT验证。

完整示例 

https://github.com/beetlex-io/BeetleX-Samples/tree/master/Web.JWT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值