From a16a19603455e5553fdeef7a109f6dcd94145227 Mon Sep 17 00:00:00 2001 From: zxh <279049017@qq.com> Date: Fri, 21 Aug 2020 10:15:57 +0800 Subject: [PATCH] 修改 为取消url验证 --- kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/config/AuthorizationServerConfig.java | 95 +++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 91 insertions(+), 4 deletions(-) diff --git a/kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/config/AuthorizationServerConfig.java b/kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/config/AuthorizationServerConfig.java index 5672172..84121f2 100644 --- a/kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/config/AuthorizationServerConfig.java +++ b/kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/config/AuthorizationServerConfig.java @@ -1,22 +1,36 @@ package com.kidgrow.oauth2.config; +import com.kidgrow.oauth2.handler.SingleTokenServices; import com.kidgrow.oauth2.service.impl.RedisClientDetailsService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper; import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer; import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter; import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer; +import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.security.oauth2.provider.code.RandomValueAuthorizationCodeServices; import org.springframework.security.oauth2.provider.error.WebResponseExceptionTranslator; import org.springframework.security.oauth2.provider.token.TokenEnhancer; import org.springframework.security.oauth2.provider.token.TokenEnhancerChain; import org.springframework.security.oauth2.provider.token.TokenStore; import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter; +import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider; import javax.annotation.Resource; import java.util.Arrays; @@ -36,8 +50,9 @@ /** * 注入authenticationManager 来支持 password grant type */ - @Autowired - private AuthenticationManager authenticationManager; +// @Autowired +// private AuthenticationManager authenticationManager; + @Resource private UserDetailsService userDetailsService; @@ -45,6 +60,9 @@ @Autowired private TokenStore tokenStore; + +// @Autowired +// private CustomRedisTokenStore tokenStore; @Autowired(required = false) private JwtAccessTokenConverter jwtAccessTokenConverter; @@ -60,6 +78,11 @@ @Autowired private RandomValueAuthorizationCodeServices authorizationCodeServices; + @Autowired + private AuthenticationProvider daoAuhthenticationOauthProvider; + @Autowired + private SingleTokenServices tokenServices; + /** * 配置身份认证器,配置认证方式,TokenStore,TokenGranter,OAuth2RequestFactory @@ -77,11 +100,75 @@ endpoints.accessTokenConverter(jwtAccessTokenConverter); } } - endpoints.tokenStore(tokenStore) - .authenticationManager(authenticationManager) + endpoints + //扩展tokenServices + .tokenServices(KidgrowTokenServices()) + .authenticationManager(new AuthenticationManager(){ + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + String token = (String) authentication.getPrincipal(); + OAuth2Authentication auth = tokenServices.loadAuthentication(token); + if (auth == null) { + throw new InvalidTokenException("Invalid token: " + token); + } + return daoAuhthenticationOauthProvider.authenticate(authentication); + } + }) .userDetailsService(userDetailsService) .authorizationCodeServices(authorizationCodeServices) .exceptionTranslator(webResponseExceptionTranslator); + + } + @Bean + DaoAuthenticationProvider daoAuthenticationProvider(){ + + DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); + + daoAuthenticationProvider.setPasswordEncoder(new BCryptPasswordEncoder()); + + daoAuthenticationProvider.setUserDetailsService(userDetailsService); + + return daoAuthenticationProvider; + + } + + @Bean + @Primary + public SingleTokenServices KidgrowTokenServices(){ + SingleTokenServices tokenServices = new SingleTokenServices(); + tokenServices.setTokenStore(tokenStore); + tokenServices.setSupportRefreshToken(true);//支持刷新token + tokenServices.setReuseRefreshToken(true); + addUserDetailsService(tokenServices, this.userDetailsService); + return tokenServices; + } + +// private SingleTokenServices tokenServices(AuthorizationServerEndpointsConfigurer endpoints) { +// SingleTokenServices tokenServices = new SingleTokenServices(); +// tokenServices.setTokenStore(tokenStore); +// tokenServices.setSupportRefreshToken(true);//支持刷新token +// tokenServices.setReuseRefreshToken(true); +// tokenServices.setClientDetailsService(endpoints.getClientDetailsService()); +// tokenServices.setTokenEnhancer(endpoints.getTokenEnhancer()); +// addUserDetailsService(tokenServices, this.userDetailsService); +// return tokenServices; +// } +// private void addUserDetailsService(SingleTokenServices tokenServices, UserDetailsService userDetailsService) { +// if (userDetailsService != null) { +// PreAuthenticatedAuthenticationProvider provider = new PreAuthenticatedAuthenticationProvider(); +// provider.setPreAuthenticatedUserDetailsService(new UserDetailsByNameServiceWrapper<>( +// userDetailsService)); +// tokenServices.setAuthenticationManager(new ProviderManager(Arrays.asList(provider))); +// } +// } + + private void addUserDetailsService(SingleTokenServices tokenServices, UserDetailsService userDetailsService) { + if (userDetailsService != null) { + PreAuthenticatedAuthenticationProvider provider = new PreAuthenticatedAuthenticationProvider(); + provider.setPreAuthenticatedUserDetailsService(new UserDetailsByNameServiceWrapper<>( + userDetailsService)); + tokenServices.setAuthenticationManager(new ProviderManager(Arrays.asList(provider))); + } } /** -- Gitblit v1.8.0