Advertisement
Guest User

Untitled

a guest
Jul 11th, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.46 KB | None | 0 0
  1. <!-- Configure Authentication mechanism -->
  2. <authentication-manager alias="authenticationManager">
  3. <authentication-provider ref="oAuth2AuthenticationProvider"/>
  4. </authentication-manager>
  5.  
  6.  
  7. <beans:bean id="oAuth2AuthenticationProvider" class="my.custom.Oauth2AuthenticationProvider">
  8. <beans:constructor-arg name="accessTokenUri" value="http://x.x.x.x/oauth/token"/>
  9. <beans:constructor-arg name="clientId" value="myClientId"/>
  10. <beans:constructor-arg name="clientSecret" value="myClientSecret"/>
  11. <beans:constructor-arg name="scope">
  12. <beans:list>
  13. <beans:value>myScope</beans:value>
  14. </beans:list>
  15. </beans:constructor-arg>
  16. </beans:bean>
  17.  
  18. <beans:bean id="resourceOwnerPasswordAccessTokenProvider" class="org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider"/>
  19.  
  20. public class Oauth2AuthenticationProvider implements AuthenticationProvider {
  21.  
  22. @Autowired
  23. private ResourceOwnerPasswordAccessTokenProvider provider;
  24.  
  25. private String accessTokenUri;
  26. private String clientId;
  27. private String clientSecret;
  28. private List<String> scope;
  29.  
  30. public Oauth2AuthenticationProvider(String accessTokenUri, String clientId, String clientSecret, List<String> scope) {
  31. this.accessTokenUri = accessTokenUri;
  32. this.clientId = clientId;
  33. this.clientSecret = clientSecret;
  34. this.scope = scope;
  35. }
  36.  
  37. @Override
  38. public Authentication authenticate(Authentication authentication) throws AuthenticationException {
  39. String username = authentication.getName();
  40. String password = authentication.getCredentials().toString();
  41. OAuth2AccessToken token = obtainToken(username, password);
  42. return handleLogonSuccess(authentication, token);
  43. }
  44.  
  45. private OAuth2AccessToken obtainToken(String username, String password) {
  46. ResourceOwnerPasswordResourceDetails passwordResourceDetails = new ResourceOwnerPasswordResourceDetails();
  47. passwordResourceDetails.setUsername(username);
  48. passwordResourceDetails.setPassword(password);
  49. passwordResourceDetails.setClientId(clientId);
  50. passwordResourceDetails.setClientSecret(clientSecret);
  51. passwordResourceDetails.setScope(scope);
  52. passwordResourceDetails.setAccessTokenUri(accessTokenUri);
  53. DefaultAccessTokenRequest defaultAccessTokenRequest = new DefaultAccessTokenRequest();
  54. OAuth2AccessToken token;
  55. try {
  56. token = provider.obtainAccessToken(passwordResourceDetails, defaultAccessTokenRequest);
  57. } catch (OAuth2AccessDeniedException accessDeniedException) {
  58. throw new BadCredentialsException("Invalid credentials", accessDeniedException);
  59. }
  60.  
  61. return token;
  62. }
  63.  
  64. public OAuth2AccessToken refreshToken(OAuth2AuthenticationToken authentication) {
  65. OAuth2AccessToken token = authentication.getoAuth2AccessToken();
  66. OAuth2RefreshToken refreshToken = token.getRefreshToken();
  67. BaseOAuth2ProtectedResourceDetails resourceDetails = new BaseOAuth2ProtectedResourceDetails();
  68. resourceDetails.setClientId(clientId);
  69. resourceDetails.setClientSecret(clientSecret);
  70. resourceDetails.setScope(scope);
  71. resourceDetails.setAccessTokenUri(accessTokenUri);
  72. OAuth2AccessToken newToken = provider.refreshAccessToken(resourceDetails, refreshToken, new DefaultAccessTokenRequest());
  73. authentication.setoAuth2AccessToken(newToken);
  74. return newToken;
  75. }
  76.  
  77. public boolean supports(Class<?> authentication) {
  78. return UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication);
  79. }
  80.  
  81. private Authentication handleLogonSuccess(Authentication authentication, OAuth2AccessToken token) {
  82.  
  83. MyCustomOAuth2AuthenticationToken successAuthenticationToken = new MyCustomOAuth2AuthenticationToken(user, authentication.getCredentials(), calculateAuthorities(authentication), token);
  84.  
  85. return successAuthenticationToken;
  86. }
  87.  
  88. public list<GrantedAuthority> calculateAuthorities(Authentication authentication) {
  89. //my custom logic that assigns the correct role. e.g. ROLE_USER
  90. }
  91.  
  92. @Configuration
  93. @EnableOAuth2Client
  94. public class RestClientConfig {
  95.  
  96. @Value("${http.client.maxPoolSize}")
  97. private Integer maxPoolSize;
  98.  
  99. @Value("${oauth2.resourceId}")
  100. private String resourceId;
  101.  
  102. @Value("${oauth2.clientId}")
  103. private String clientId;
  104.  
  105. @Value("${oauth2.clientSecret}")
  106. private String clientSecret;
  107.  
  108. @Value("${oauth2.accessTokenUri}")
  109. private String accessTokenUri;
  110.  
  111.  
  112. @Autowired
  113. private OAuth2ClientContext oauth2ClientContext;
  114.  
  115.  
  116. @Bean
  117. public ClientHttpRequestFactory httpRequestFactory() {
  118. return new HttpComponentsClientHttpRequestFactory(httpClient());
  119. }
  120.  
  121. @Bean
  122. public HttpClient httpClient() {
  123. PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
  124. connectionManager.setMaxTotal(maxPoolSize);
  125. // This client is for internal connections so only one route is expected
  126. connectionManager.setDefaultMaxPerRoute(maxPoolSize);
  127. return HttpClientBuilder.create().setConnectionManager(connectionManager).build();
  128. }
  129.  
  130. @Bean
  131. public OAuth2ProtectedResourceDetails oauth2ProtectedResourceDetails() {
  132. ResourceOwnerPasswordResourceDetails details = new ResourceOwnerPasswordResourceDetails();
  133. details.setId(resourceId);
  134. details.setClientId(clientId);
  135. details.setClientSecret(clientSecret);
  136. details.setAccessTokenUri(accessTokenUri);
  137. return details;
  138. }
  139.  
  140. @Bean
  141. public AccessTokenProvider accessTokenProvider() {
  142. ResourceOwnerPasswordAccessTokenProvider tokenProvider = new ResourceOwnerPasswordAccessTokenProvider();
  143. tokenProvider.setRequestFactory(httpRequestFactory());
  144. return new AccessTokenProviderChain(
  145. Arrays.<AccessTokenProvider> asList(tokenProvider)
  146. );
  147. }
  148.  
  149. @Bean
  150. public OAuth2RestTemplate restTemplate() {
  151. OAuth2RestTemplate template = new OAuth2RestTemplate(oauth2ProtectedResourceDetails(), oauth2ClientContext);
  152. template.setRequestFactory(httpRequestFactory());
  153. template.setAccessTokenProvider(accessTokenProvider());
  154. return template;
  155. }
  156. }
  157.  
  158. @Autowired
  159. private OAuth2RestTemplate restTemplate;
  160.  
  161. restTemplate.getOAuth2ClientContext().getAccessTokenRequest().set("username", username);
  162. restTemplate.getOAuth2ClientContext().getAccessTokenRequest().set("password", password);
  163.  
  164. String url = "http://localhost:{port}/api/users/search/findByUsername?username={username}";
  165.  
  166. ResponseEntity<User> responseEntity = restTemplate.getForEntity(
  167. url, User.class, 8081, username);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement