对SpringGateway+Security+OAuth2.0的认识

趁着下载Keycloak的时候,记录一下自己对SpringCloud中的用户鉴权系统的认识。

OAuth2.0 四种授权模式

模式refresh_token用途
authorization_codetrue允许用户通过第三方应用登录自身获取资源,前提是用户已登录自身服务。
implicitfalse简化模式,跳过了获取授权码过程。
passwordtrue账号密码模式,用于高度授信场景,比如登录微信、QQ自身|
client_credentialsfalse客户端模式,用于高度授信的其他服务,如企业自己的其他服务,或高度加密的硬件客户端,登录过程完全不需要用户操作。

Security、ResourceServer、ClientServer各自的作用和关系

网关统一用户认证

很简单,说白了就是在Gateway集成Security,这样以来Gateway就成了一个ResourceServer,并且可以为所有路由做用户认证。

但是!具体的鉴权还是需要各个服务自己去做,毕竟网关不知道具体的服务需要具体哪一项权限。

FAQ

直接使用微信、支付宝的token来做自己的有效性验证可以码?

当然可以!只不过,人家的token验证只有在调用他们的服务时才会生效,如果不调用他们的服务,我们自己不知道人家的token是否有效(超时过期)。

那么该怎么实现?当我们自己的接口被访问时,先去调个人家的服务,最好是无关痛痒的服务,单纯为了验证人家的token是否有效。

但是这样以来就大大降低了接口的请求速度,而且也不优雅,平衡下来还不许自己搭建帐号体系来的实在!

采用授权码方式让自己的客户端访问自己服务?

这就叫脱了裤子放屁,为安全而安全!

用微信的第三方登录举例,假如我们没有登录微信,当使用微信时,依然需要用帐号密码方式先登录微信。因为你在操作授权登录时,是先调起微信的页面或者它SDK的页面,是在人家的页面里面玩的,对于微信来讲,他自己的页面就是高度授信的,所以追本溯源,授权码登录方式还是基于帐号密码之上的。