陆小曼|OAuth2.0分布式系统环境搭建( 二 )
然后我们就可以去进行OAuth2.0的相关配置了 , 方法很简单 , 只要在配置类上添加@EnableAuthorizationServer注解并让其继承自AuthorizationServerConfigurerAdapter 。 最后重写其中的三个configure()方法即可 。
@Configuration@EnableAuthorizationServerpublicclassAuthorizationServerConfigextendsAuthorizationServerConfigurerAdapter{@AutowiredprivateAuthenticationManagerauthenticationManager;//从WebSecurityConfig中获取的@AutowiredprivateAuthorizationCodeServicesauthorizationCodeServices;//本类中的 , 授权码模式需要@AutowiredprivateTokenStoretokenStore;//TokenConfig中的@AutowiredprivatePasswordEncoderpasswordEncoder;//从WebSecurityConfig中获取的@AutowiredprivateClientDetailsServiceclientDetailsService;//本类中的@AutowiredprivateJwtAccessTokenConverterjwtAccessTokenConverter;//TokenConfig中的//用来配置令牌端点的安全约束@Overridepublicvoidconfigure(AuthorizationServerSecurityConfigurersecurity)throwsException{security.tokenKeyAccess("permitAll")///oauth/token_key提供公有密匙的端点允许任何人访问.checkTokenAccess("permitAll")///oauth/check_token:用于资源服务访问的令牌解析端点允许任何人访问.allowFormAuthenticationForClients();//表单认证(申请令牌)}//用来配置客户端详情服务,客户端详情信息在这里进行初始化,//你能够把客户端详情信息写死在这里或者是通过数据库来存储调取详情信息@Overridepublicvoidconfigure(ClientDetailsServiceConfigurerclients)throwsException{clients.withClientDetails(clientDetailsService);}//用来配置令牌(token)的访问端点(url)和令牌服务(tokenservices)@Overridepublicvoidconfigure(AuthorizationServerEndpointsConfigurerendpoints)throwsException{endpoints.authenticationManager(authenticationManager)//认证管理器,密码模式需要.authorizationCodeServices(authorizationCodeServices)//授权码服务,授权码模式需要.tokenServices(tokenService()).allowedTokenEndpointRequestMethods(HttpMethod.POST);//允许post提交}@BeanpublicAuthorizationCodeServicesauthorizationCodeServices(DataSourcedataSource){//设置授权码模式的授权码存取到数据中returnnewJdbcAuthorizationCodeServices(dataSource);}//客户端详情服务 , 从数据库中获取@BeanpublicClientDetailsServiceclientDetailsService(DataSourcedataSource){ClientDetailsServiceclientDetailsService=newJdbcClientDetailsService(dataSource);((JdbcClientDetailsService)clientDetailsService).setPasswordEncoder(passwordEncoder);returnclientDetailsService;}//令牌管理服务@BeanpublicAuthorizationServerTokenServicestokenService(){DefaultTokenServicesservice=newDefaultTokenServices();service.setClientDetailsService(clientDetailsService);//客户端信息服务service.setSupportRefreshToken(true);//支持自动刷新service.setTokenStore(tokenStore);//令牌增强TokenEnhancerChaintokenEnhancerChain=newTokenEnhancerChain();tokenEnhancerChain.setTokenEnhancers(Arrays.asList(jwtAccessTokenConverter));service.setTokenEnhancer(tokenEnhancerChain);service.setAccessTokenValiditySeconds(7200);//令牌默认有效期2小时service.setRefreshTokenValiditySeconds(259200);//刷新令牌默认有效期3天returnservice;}}现在来解释一下上面代码中的内容
ClientDetailsService我们配置了从数据库中获取客户端配置 。 但是是怎么从数据库中获取的呢 , 这里用到了一个JdbcClientDetailsService , 点击源码里看看
- 数码小王|单机、分布式、集群的区别与联系
- 陆小曼|抗光出色——菲斯特画卷光学屏S1,安装简单
- 陆小曼|介绍开通方法,你能有多少额度?,微信版“花呗”上线了
- 百知先生|Yotta企业云盘:高安全高性能的分布式存储
- 陆小曼|AI、量子计算能带来什么?美国拟设立12个AI&量子研发中心
- 陆小曼|商务部调整的《中国禁止出口技术目录》意味着什么?何去何从
- 陆小曼|联发科的做法犹如一个“孩子”向“流氓”借钱一样幼稚天真
- 陆小曼|为什么造不出光刻机,造出光刻机有多难?,原子弹我们都造出来了
- 陆小曼|但它仍然还有希望,何止是芯片!华为的手机屏幕供应也出了问题
- 海威恒泰|分布式网络大屏幕显示系统适应市场的发展趋势