[TOC] ## uaa-server-spring-boot-starter 在前面的项目中,咱们使用了auth-server认证中心,咱们实际项目中,可能会有多个认证中心,对应不同的处理业务,这样,咱们把认证中心的代码抽取出来,为后面模块引用方便。 ![](https://box.kancloud.cn/67e561ea8cb7eeab5f62d74f4956a5ab_1064x532.png) ## 功能 * 通用认证授权 * 通用的token生成机制(TokenStore) * 通用的访问控制(SecurityConfig,AuthorizationServerConfig,ResourceServerConfig) * 通用的异常配置(SecurityHandlerConfig,ExceptionHandlerAdvice) * 通用的验证码校验 ## 常用过滤器 ![](https://img.kancloud.cn/e1/05/e1053d08d889f92759f9e54566a98baf_1793x901.png) ## uaa-server-spring-boot-starter使用 ![](https://img.kancloud.cn/e4/60/e460bf4444e258d0ce03fa9adbd7c8c5_1740x770.png) * auth-server作为一个认证服务器,引入uaa-server-spring-boot-starter ![](https://img.kancloud.cn/fe/7a/fe7ac9108d57ec9d64e8d7d55fe5763b_1006x660.png) ![](https://img.kancloud.cn/5c/c7/5cc78590b1cb6a723e0681c9ce2e904e_1552x622.png) ### UAAServerConfig的作用 封装oauth认证的以下模式 * 简易模式 * 客户端模式 (适合无用户参与的应用) * 密码模式(适合官方应用) * 授权码模式(最广泛使用的流程,适合web/app/前端) * 刷新模式 * 短信模式 ![](https://img.kancloud.cn/9e/f7/9ef796860fff7591e0d010c2189bedb3_1837x670.png) ## uaa-server-spring-boot-starter代码清单 ### @EnableAuthorizationServer 开启 Endpoint ![](https://img.kancloud.cn/7f/b1/7fb16f660ff0ef96fdeae1c8233b098a_1688x652.png) * 对应开启/oauth/token 接口 ![](https://img.kancloud.cn/92/c7/92c7092c01d83b5c937dea1ec7b55b29_1770x700.png) * 对应开启/oauth/authorize接口 ![](https://img.kancloud.cn/b9/04/b904914a89e2130c58ba8bd33e4db0f1_1844x693.png) ### 授权码存取策略 在 /oauth/authorize的调用中,会返回授权码,用授权码换取真正的token([1.oauth接口](3.oauth%E8%AE%A4%E8%AF%81%E6%8E%A5%E5%8F%A3.md)) ,如果启用多个认证中心,授权码需要缓存redis里面,RedisAuthorizationCodeServices,解决启动多个认证中心授权码问题 ![](https://img.kancloud.cn/c6/24/c624d1b49701ea192edf997823af8ddf_1594x605.png) ### 应用应用密钥校验 org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter中的attemptAuthentication方法校验应用以及密钥 ![](https://img.kancloud.cn/cb/d1/cbd1c25cca3431e1582d24f4f8212248_1690x863.png) 应用及密钥通过以下代码缓存redis ![](https://img.kancloud.cn/ae/03/ae038126cf2545645a91094a219c8270_1656x535.png) ### 认证异常统一处理 在spring security oauth中,密码错误等都在此处捕获异常,统一异常格式{"resp_code" , "" , "resp_msg":""} ,此处最新代码修改为({"code" :"","msg":""}) ![](https://img.kancloud.cn/30/9d/309d7f4dd63e2a9254715e259723d5e0_1592x537.png) ### 其他异常统一处理 此处最新代码修改为({"code" :"","msg":""}) ![](https://img.kancloud.cn/1a/ba/1abab0dc532adc6c131d6e8dee166ce4_1652x538.png) ### token redis持久化 ![](https://img.kancloud.cn/13/77/13771ecfeff91758232d460ffddb5ea6_1692x576.png) ![](https://img.kancloud.cn/af/7c/af7c1496c257c3700265b3cf375f4f61_1643x593.png) ### token的有效期 [06.token有效期的处理](22.token%E6%9C%89%E6%95%88%E6%9C%9F%E7%9A%84%E5%A4%84%E7%90%86.md) ### jwt token [05.JWT token方式启用](29.JWTtoken%E6%96%B9%E5%BC%8F%E5%90%AF%E7%94%A8.md) ### kaptcha通用的图形验证码 ![](https://img.kancloud.cn/8e/df/8edf9fa112c872653ee27a7d422976c9_1836x677.png)