# security-core在项目中的位置 ![](https://img.kancloud.cn/43/3a/433a1aa4c85d69f6cf32671c8c6fbf54_1055x734.png) ## security-core的作用 包装资源服务器,作为独立单元为api-gateway,user-center等提供安全保障。 # 资源服务器 * 要访问资源服务器受保护的资源需要携带令牌(从授权服务器获得) * **客户端往往同时也是一个资源服务器,各个服务之间的通信(访问需要权限的资源)时需携带访问令牌** #### Spring Cloud Oauth 如何开启资源服务器 * 资源服务器通过 @EnableResourceServer 注解来开启一个 **OAuth2AuthenticationProcessingFilter** 类型的过滤器 * 通过继承 ResourceServerConfigurerAdapter 类来配置资源服务器 OAuth2AuthenticationProcessingFilter代码如何查看 #### ![](https://box.kancloud.cn/a11aeff8aefd6fe6cdacf138e30bd923_839x493.png) (Ctrl +shift+T) ## ResourceServerSecurityConfigurer 可配置属性 * tokenServices:ResourceServerTokenServices 类的实例,用来实现令牌业务逻辑服务 * resourceId:这个资源服务的ID,这个属性是可选的,但是推荐设置并在授权服务中进行验证 * tokenExtractor 令牌提取器用来提取请求中的令牌 * 请求匹配器,用来设置需要进行保护的资源路径,默认的情况下是受保护资源服务的全部路径 * 受保护资源的访问规则,默认的规则是简单的身份验证(plain authenticated) * 其他的自定义权限保护规则通过 HttpSecurity 来进行配置 * 使用 DefaultTokenServices 在资源服务器本地配置令牌存储、解码、解析方式 # security-core代码清单详解 认证授权分离架构的oauth资源服务器,需要在代码中设置一个门岗,验证认证中心的token ,门岗代码如下 ![](https://box.kancloud.cn/a6c1382d621a4bcf34c53ab56e6a8459_1769x776.png) 注意以下被注解,生产需要打开,配置用户的api权限,注释后有token即可访问 `// 开启spring security 注解 // @EnableGlobalMethodSecurity(prePostEnabled = true)` # token票据验证 ![](https://box.kancloud.cn/7eea410bb58d317640e825e7a3e7c20e_588x703.png) 票据 redis持久化 ![](https://box.kancloud.cn/805bc758967ef81ecc4e9162b64e7653_1729x547.png) ![](https://box.kancloud.cn/8c489bf1042aa130aeb7068c379fb1fd_1765x768.png) 作为一个认证授权分离的架构,采用此种门岗+票据验证方式是一种效率最高的方式.读相关源码可以验证此结论,此方案已生产验证。 ![](https://box.kancloud.cn/1c347e7b86407be804f33384ee113f5f_963x218.png) # oauth白名单配置 ![](https://box.kancloud.cn/7faa18b6385750842142845d7bd413d3_1757x641.png) # 网关api权限设计 相同用户,不同应用的权限隔离 客户端模式 : 客户端A 申请的token ,可以访问/api-user/menu/current , 客户端B 申请的token,不让访问/api-user/menu/current 密码模式: 客户端模式 : 客户端A admin用户 申请的token ,可以访问/api-user/menu/current , 客户端B admin用户 申请的token,不让访问/api-user/menu/current 参考issue:[https://gitee.com/owenwangwen/open-capacity-platform/issues/IRG23]() oauth引入自定义权限rbacservice前置支持处理 ![](https://box.kancloud.cn/6568e378c65f872f7f47e36aea776e97_1764x774.png) 开启自定义rbacservice应用api权限隔离 ![](https://box.kancloud.cn/dbf40bee327e8fc38c7118720923c7b4_1761x689.png) ![](https://box.kancloud.cn/f573cab1f1e5e546e6a1e929ac8beedb_1781x752.png) 如果需要细粒度的控制网关api权限,请将注释放开 通过clientID隔离API权限 ![](https://box.kancloud.cn/0d3f34894c316058e1085ae8fe9dc910_1737x603.png) # 自定义授权失败接口 ![](https://box.kancloud.cn/845f24860699c7be9ef34cf537f7863c_1774x748.png) ![](https://box.kancloud.cn/9d4f1d8d8b92b9d52976b8d5171550ed_1808x788.png)