作者回复: 目前开源的资源权限设计方案很多,可以在github/gitee上搜一大把。不过我觉得大都不是很通用,所以我自己正在设计开发一个,类似auth0的用户管理和身份认证/鉴权服务,开发完成会开源出来。
作者回复: 外网token/内网jwt,这个是一种令牌实现方式,稍微有点复杂,中间涉及到令牌的存储和转化。本课程案例staffjoy,采用简单的jwt令牌,全程无状态,业务上安全性也足够。如果需要,在理解本课程案例代码的基础上,你不难扩展出外网token/内网jwt的方式,只不过需要存储token/jwt的映射关系,可存在DB或Cache中。
作者回复: 你好,app如果是hybrid的,也可以考虑放cookie或者local storage;如果是纯native app,那么android/ios都有自己专门的本地存储机制,然后可以通过http header传递令牌。
作者回复: 网关是无状态集群部署的,可以按需添加更多网关实例扩容应对更大流量。
作者回复: 上面讲Staffjoy安全认证架构设计中讲到SSO了,用户通过www服务登录,浏览器中就会种cookie,这个cookie种在根域上,例如,生产就是staffjoy.com,后面通过浏览器访问www.staffjoy.cpm或app.staffjoy.com或myaccount.staffjoy.com,只要是xxx.staffjoy.com都不需要再登录(除非jwt过期或者主动等出),会自动登录,因为cookie会自动带上,网关截获cookie,校验里头的jwt,通过就可以访问。
作者回复: resttemplate支持Interceptor机制动态添加http header的,可以参考:https://www.baeldung.com/spring-rest-template-interceptor
作者回复: spring(boot)提供支持集中式session的接口,可以对接redis等缓存,种cookie的动作spring(boot)框架内部已经实现。自己种cookie是为了灵活性,spring(boot)的security/session机制主要针对单块web应用,微服务+spa应用的场景比较复杂,自己处理安全和种cookie会更加灵活,实现也不复杂。
作者回复: 具体做法还是要看上下文,如果不同用户群在业务上是有关联的,可以通过角色区分,尽量建模成一个用户/授权中心,这时用户数据可以存ldap。如果不同用户群在业务上是不关联的,可以采用2个以上用户/授权中心(但也不能太多)分开管理,或者考虑采用支持多租户的用户/授权产品(比如fusionauth.io),这类产品支持一个用户/授权中心,但是可以多租户支持不同用户群分开管理。
作者回复: jwt如果放在localstorage中有被xss攻击可能,恶意js可以操作localstorage里头令牌。staffjoy的jwt是放在cookie中,而且是http only,js脚本无法操作。但是cookie有csrf(跨站点请求伪造)风险,对于雇员排班这类应用可以接受,如果是其它安全严格网站,需要增加csrf防护,一般web框架都有支持(例如spring security)。
作者回复: jwt token可以不放cookie,可以放在header中传递,这个时候需要自己管理token在客户端的存储,然后程序要负责管理和传递token。
作者回复: 课程更新由极客时间统一安排,学习不用一次学太多太快,保持适当节奏即可。预计8月底前会全部更新完,谢谢支持!