1.1整体设计
- Portal-Gateway的应用场景:用户已登录,请求其他服务。
- 客户端的请求到达网关,网关会调用gateway系统进行请求身份合法性的验证:
- 验证不通则直接拒绝,并返回401;
- 如果通过验证,则转发到具体服务。
Portal-Gateway的架构图如下所示:
1.2 gateway实现
主要实现的功能有:
-
- 区分暴露接口(即对外直接访问)和需要合法身份登录之后才能访问的接口
- 需要合法身份登录之后才能访问的接口,根据传入的Access token进行构造头部,头部主要包括userId等信息,可根据自己的实际业务在auth服务中进行设置。
- 需要暴露接口设置permitAll(),其余接口进入身份合法性校验的流程,调用auth服务,如果通过则正常继续转发,否则抛出异常,返回401。
绘制的流程图如下:
1.2.1 permitAll实现
对外暴露的接口可以直接访问,这可以依赖配置文件,而配置文件又可以通过配置中心进行动态更新,所以不用担心有hard-code的问题。经过permitall配置的路径
在配置文件中定义需要permitall的路径:
auth: permitall: - pattern: /login/** - pattern: /web/public/**
服务启动时,读入相应的Configuration,下面的配置属性读取以auth开头的配置:
@Bean @ConfigurationProperties(prefix = "auth") public PermitAllUrlProperties getPermitAllUrlProperties() { return new PermitAllUrlProperties(); }
1.2.2 自定义RemoteTokenServices实现
ResourceServerTokenServices
接口其中的一个实现是RemoteTokenServices
。
RemoteTokenServices
主要是查询auth服务的/check_token
端点以获取一个token的校验结果。如果有错误,则说明token是不合法的。Spring Cloud Security添加如下默认配置,对应auth服务中的相应端点。