作者回复: jwt是无状态自包含自验证,实现比较轻量,目前业界蛮流行的,很多应用采用jwt,因为大部分应用场景安全并不非常严格,另外jwt也可合理缩短有效期,或在网关上进一步定制加强安全验证。
作者回复: oauth2是一个授权框架和规范,这个规范试图覆盖主要的微服务安全场景(第三方访问,无线应用,企业内部应用),目前在第三方访问和无线应用用得比较多,企业内部(包括内部微服务间调用)其实没有这么严格,各种不同做法(传统token,key,用户名/密码,ip黑白名单等)。
作者回复: 谢谢反馈🌹会反馈给极客时间
作者回复: ppt中,网关上的OAuth Filter主要用于access token校验,获取jwt token;服务上的OAuth Filter,主要用于jwt的解释,获取用户和权限等信息,填充SecurityContext类似构件。用户权限在哪里做?既可以在网关上集中做,也可以在服务端自己做,都能做到,各有优劣,视企业和架构上下文选择即可。
作者回复: access token如果是bearer的话,就像钱一样,别人偷走也可以用的,没有绝对的安全,一般传输层用https防截取,然后缩短token过期时间到安全可接受范围。
作者回复: 传统单块web应用常用session式会话,现代微服务一般用基于令牌的分布式会话。令牌token有有效期,可在资源端(或通过网关集中)通过授权服务器集中校验,过期校验不通过。如果用jwt令牌,内含过期时间,资源端可自校验。
作者回复: 很专业👍 在我的另外一门课《Spring Boot和Kubernetes云原生微服务实践》中,专门讲解了基于JWT令牌的微服务认证授权机制。JWT支持对称或者公私钥签名。
作者回复: Spring Cloud Gateway比较新,这个我还没有实现过,找了一些样例供你参考,你自己需要进一步调研和尝试: https://github.com/artemMartynenko/spring-cloud-gateway-oauth2-sso-sample-application https://github.com/spring-cloud-samples/sample-gateway-oauth2login https://github.com/spring-cloud/spring-cloud-gateway/issues/179#issuecomment-406238177
作者回复: 你好,1,如果采用网关统一认证,那么所有API请求必须经过网关,这个在物理部署架构上可以做到。2,access token换成jwt token,是因为传统访问令牌access token一般是无意义的随机字符串,一般不包含用户名/角色等用户信息(后台服务通常需要这些信息),转成jwt的话,里头可以包含这些信息。当然也可以不转jwt,直接把用户名等信息通过HTTP Header往后传递,更简单一点。
作者回复: 不用经网关,直要能通过http header往后传递即可,比如在spring中很容易做到,比如从request context里头获取jwt,通过http client再以http header方式往后传递。