jwt+shiro使用时JwtShiroBridge使用的问题
1、Jwt + shiro 如何去构建鉴权 ?
JwtShiroBridge目前提供了 subject的构建,相当于解决了认证问题。但是鉴权的部分并不包括。我能想到的思路是,在认证服务中构建jwt后,会将权限/角色保存在 token中,需要做 subject.login 去解决授权,但是总感觉这样实现好傻。。每次请求都这么重,是否有其他实现思路 ?
2、如果我使用 jwt + shiro 的话,我并不想让服务器 去构建 session,是否可以控制一下下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
https://github.com/louislivi/fastdep 引入一个依赖即可快速实现。
存在缓存里面的话有个问题没法解决,就是如果是两个服务,其中服务A提供认证,服务A把权限存在缓存里面;服务B怎么在页面里用shiro的权限控制进行控制相关信息。 我没想到怎么弄
使用jwt的话就没有 session 了,所以jwt中是需要存储授权信息的,各个服务只需要做鉴权就可以了,现在的问题是jwt 配合 shiro 怎么更优雅的解决这个鉴权。
回复
我的想法是A为认证服务的话,用户访问B的时候转跳到A进行认证,认证成功后,附带参数转调回B,在B服务再重新login操作使shiro能知道该用户的权限,然后就可以使用jboot文档里提到的那些模板用法了
jwt中仅包含必要的数据,比如jwt中仅包含userid,权限/角色再根据userid获得,或者放到缓存中,其它更多session数据都可以这样放入缓存,没必要把所有东西都放到jwt token中。
调用login这个方法行得通,做过测试。就是感觉有点重,想寻找另一种思路。
回复
@理工男海哥 : jboot亲测可行,完全无状态,不创建session,附上demo https://gitee.com/rlaxuc/jboot-admin/tree/master/jboot-b2c
通过 JwtShiroBridge 的 buildSubject 构建subject的时候,调用 subject的login方法,再把subject返回。
调用login方法的时候需要传AuthenticationToken,自己写一个JwtAuthenticationToken继承AuthenticationToken,JwtAuthenticationToken里面有jwt信息。
调用subject的login方法,会触发你自定义realm的doGetAuthenticationInfo方法,并把JwtAuthenticationToken数据传进来,在doGetAuthenticationInfo方法里返回合理的AuthenticationInfo,理论上就没问题。