需求:
每次请求的时都进行身份认证/权限验证 ( 用户的权限是可以分配的, 不固定, 可以具有基础权限,也可以具有全部/部分权限 )
想用JwtBearer中间件的方式来做.
才疏学浅,看了好多文章还是挺蒙的, 有几个问题. 希望大神解答..
1. 采用jwt bearer中间件的方式做认证如何.
2. 如何让签发的 jwt token设置成滑动过期 .
3. 这种情况下 去重写AuthorizeFilter 来进行权限验证 合适吗?
4. 有没有其他的解决方案... 前提是用api 签发token的形式来做(因为项目是前后端分离的)
根据你的需求,建议你使用基于Token的Session认证方式实现。
token = Session id,token放置于request header中。
另外,附JWT的我的文章:https://github.com/hstarorg/HstarDoc/blob/master/%E5%89%8D%E7%AB%AF%E7%9B%B8%E5%85%B3/JWT%E8%AF%A6%E8%A7%A3.md
其实已经按照类似的想法实操过一个项目了. 但是没有用jwt验证. 只是用jwt签发token,不参与验证.
我感觉使用jwt毫无意义... - -
@咖菲猫: 主要是你的需求不是很契合jwt的场景,所以比较别扭。jwt的优势是分布式友好,不需要存储系统参与就可以认证。
看一下园子里这篇博文:如何简单的在 ASP.NET Core 中集成 JWT 认证?
文章不错. 但是好像不能解决我的问题.
我想要类似类似memorycache滑动过期的这种机制.
即签发的token能够支持滑动过期. 在滑动时间内(1H)命中token 则延迟过期时间.
想用jwt的原因是安全吧. 否则随意生成token放在memorycache中在过滤器种添加验证逻辑就能达到我想要的效果了....
当第三方不好进行支持,这种代码原本也就写不到多少行,何必纠结。
嗯. 还是按照原有思路搞算了. 不纠结了
1,中间件去参考微软官方文档,中间件执行顺序是串行的,注意注册顺序。
public class AuthorizeMiddleware { private readonly RequestDelegate next; public AuthorizeMiddleware(RequestDelegate next) { this.next = next; } public async Task Invoke(HttpContext context) { var token = context.Request.Headers.FirstOrDefault(h => h.Key == "Authorization").Value; //context.Response.StatusCode = 401; //处理结束转其它中间组件去处理 await next(context); } }
2,Token本身无法实现滑动过期,可以加一个RefreshToken去重新获取Token。如果你有多种类型的前端调用,应该给每种前端不同的Token(有效时间)发放代码。
3,合适。虽然看NetCore官方文档上都推荐使用Middleware,但是Authorize的话我觉得Filter结合Attribute更好用。
4,IdentityServer4了解一下?
thanks !