作者回复: 这个和你的钥匙被别人偷去是一个问题,没有办法绝对避免,但是可以减轻风险。一些措施,采用https保证传输层的安全,设置合理的token过期时间,提供主动吊销token的接口,复杂的还可以把token和设备id进行绑定。
作者回复: web主要指传统mvc应用,带服务器端动态生成页面的。html5和单页spa应用类似,属于js+html应用直接住在用户浏览器里头的,通过API直接调用后台获取数据的。h5应用是有些公司特定叫法,单页spa应用是更通用叫法。
作者回复: 你好,微服务场景下,考虑token而不是session,主要考虑是:
1.) 微服务场景下,不仅有传统Web应用(session适合),还有单页,无线原生,甚至其它设备等不用浏览器的场景,这些场景token更合适。
2.) oauth2/token/jwt是目前业界服务间授权认证的开放标准。
简单讲,session主要适用于传统web场景,而token可以同时适用于各种微服务场景(同时包括你讲的第一方和第三方场景),所以,综合考虑采用统一token方式,这样不需要维护两套体系。
当然,如果你理解底层原理,session和token本质上是类似, 只是形式有变化。
作者回复: 我的课程架构图都是用ppt制作(windows的话用powerpoint, mac用keynote)。
架构图其实和工具关系不大,关键要心中有图+一定的抽象总结能力:)
作者回复: 这个架构假设是企业第一方场景,也就是前端应用、认证授权服务、网关和后台服务,都是企业自己开发的,都是可信任的。
oauth2.0授权码模式,可以用于三方授权认证场景,比如某企业开发一个三方应用,通过google或者github的oauth2服务实现联合登录。当然,oauth2授权码模式,也可以用于第一方场景,不过流程会比上面的架构要复杂。
作者回复: auth service是一个独立的服务,不是网关,网关和auth service配合,可以实现基于网关的集中式认证鉴权。
作者回复: 各有利弊,放在网关上统一做的话,就会耦合依赖网关(调试测试不方便),放在每个服务自己做的话,服务端会引入复杂性。
一般业务规模小的时候,可以放在服务端做,规模大了考虑网关统一(有一定服务治理能力要求)。我在之前企业,两种都见过,都玩得还不错,没有绝对好坏,具体要根据你自己的业务上下文综合权衡。
作者回复: 下一节有方案,V3.6基于JWT的安全认证方案,这个方案是全程无状态,Auth Serivce不需要维护状态,网关也不需要维护状态。
基于JWT的安全认证方案是目前微服务架构的一种主流方案,尤其适合安全不是特别敏感场景。
作者回复: 建议管理平台和移动后端服务分开用不同的网关,这样职责分离易于维护。
如果一定要在一起,也可以,因为网关只关心校验令牌,网关上可以有两套校验逻辑,一套负责校验管理后台令牌,另外一套校验移动后端服务令牌,当请求过来,该启用哪个校验逻辑,可以根据域名或者path等条件判断。