BeetleX.FastHttpApi之JWT和自定义访问验证
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于BeetleX.FastHttpApi之JWT和自定义访问验证的主要内容,如果未能解决你的问题,请参考以下文章
BeetleX实现MessagePack和Protobuf消息控制器调用websocket服务详解
.NET Core 3.0 中 AspNetUserToken 和自定义 JWT 令牌之间的区别