现在只分析常见的两种模式,密码和授权码模式
密码模式
SSO客户端作用是:要提供登陆页面login.html ,且登陆接口,在登录接口中调用authServer中auth/token接口,并且携带username,userpassword,client_id,client_secret
gateway网关作用是:对浏览器请求进行过滤,如果没有携带token,则一律请求SSO客户端的登陆页面,如果有携带token,则请求authServer中check/token接口,如果check token通过,再校验token的资源权限,如用户A拥有资源urlA(user-->role-->permission(urlA) ),如果用户用这个token去请求urlB,则应提示访问权限不足
资源服务器作用:主要是定义业务服务(如订单服务,商品服务....)
authServer:生成token,管理token,维护第三方客户端的APP信息
授权码模式
SSO客户端作用是:要定义两个服务
1、携带client_id和login_callback_url去认证中心获取授权码code
2、携带client_id和client_secret,用户名,密码和resource_callback_url去认证中心获取token
gateway网关作用是:对浏览器请求进行过滤,如果没有携带token,则一律请求SSO客户端的登陆页面,如果有携带token,则请求authServer中check/token接口,如果check token通过,再校验token的资源权限,如用户A拥有资源urlA(user-->role-->permission(urlA) ),如果用户用这个token去请求urlB,则应提示访问权限不足
资源服务器作用:主要是定义业务服务(如订单服务,商品服务....)
authServer:提供登陆页面login.html,生成token,管理token,维护第三方客户端的APP信息
注意点
1、授权码模式 核心就是不让用户的用户名和密码被第三发系统获取,所以登陆页面放在认证中心
2、授权码code只能使用一次
3、在认证中心生成的token是短活的,refresh_token可以设置很长时间,可以是50年都可以,但是token一般设置的时间短,这样做的目的就是防止token被窃取了,当gateway检测出token失效了,则应该用refresh_token去认证中心获取新的token
4、无论是密码模式还是授权码模式都要client_id,client_secret验证
5、上述中gateway做了统一授权,认证的作用,资源服务器没有添加认证授权拦截,可以让资源代码职责单一,减少冗余代码,如果要对资源服务器对安全验证,则在内网中可以设置IP白名单访问
6、如果token是JWT形式的,则无需每次请求都去check token了,提高性能