jwt+shiro使用时JwtShiroBridge使用的问题

Rlax 发布于 2018/03/22 12:03
阅读 1K+
收藏 0

1、Jwt + shiro 如何去构建鉴权 ?

JwtShiroBridge目前提供了 subject的构建,相当于解决了认证问题。但是鉴权的部分并不包括。我能想到的思路是,在认证服务中构建jwt后,会将权限/角色保存在 token中,需要做 subject.login 去解决授权,但是总感觉这样实现好傻。。每次请求都这么重,是否有其他实现思路 ?

2、如果我使用 jwt + shiro 的话,我并不想让服务器 去构建 session,是否可以控制一下下。 

加载中
0
理工男海哥
理工男海哥

通过 JwtShiroBridge 的 buildSubject 构建subject的时候,调用 subject的login方法,再把subject返回。

调用login方法的时候需要传AuthenticationToken,自己写一个JwtAuthenticationToken继承AuthenticationToken,JwtAuthenticationToken里面有jwt信息。

调用subject的login方法,会触发你自定义realm的doGetAuthenticationInfo方法,并把JwtAuthenticationToken数据传进来,在doGetAuthenticationInfo方法里返回合理的AuthenticationInfo,理论上就没问题。

Rlax
Rlax
回复 @理工男海哥 : jboot亲测可行,完全无状态,不创建session,附上demo https://gitee.com/rlaxuc/jboot-admin/tree/master/jboot-b2c
理工男海哥
理工男海哥
回复 @Rlax : 其实不重,就是不太优雅而已。无论如何,你肯定要查询jwt对应用户的相关角色和权限的。只是在哪里查的问题而已,如果做好对应的缓存,一定问题都没有的。
Rlax
Rlax
调用login这个方法行得通,做过测试。就是感觉有点重,想寻找另一种思路。
0
kakai
kakai

jwt中仅包含必要的数据,比如jwt中仅包含userid,权限/角色再根据userid获得,或者放到缓存中,其它更多session数据都可以这样放入缓存,没必要把所有东西都放到jwt token中。

Mr天明
Mr天明
回复 @疯狂小明 : 我的想法是A为认证服务的话,用户访问B的时候转跳到A进行认证,认证成功后,附带参数转调回B,在B服务再重新login操作使shiro能知道该用户的权限,然后就可以使用jboot文档里提到的那些模板用法了
Rlax
Rlax
使用jwt的话就没有 session 了,所以jwt中是需要存储授权信息的,各个服务只需要做鉴权就可以了,现在的问题是jwt 配合 shiro 怎么更优雅的解决这个鉴权。
疯狂小明
存在缓存里面的话有个问题没法解决,就是如果是两个服务,其中服务A提供认证,服务A把权限存在缓存里面;服务B怎么在页面里用shiro的权限控制进行控制相关信息。 我没想到怎么弄
0
Rlax
Rlax

基于jboot的jwt+shiro无状态认证授权已经实现,参加demo

https://gitee.com/rlaxuc/jboot-admin/tree/master/jboot-b2c

0
louislivi
louislivi

https://github.com/louislivi/fastdep 引入一个依赖即可快速实现。

返回顶部
顶部