Skip to content

Commit 54b6af9

Browse files
committed
inject claims in Authentication
1 parent 996b1e9 commit 54b6af9

File tree

7 files changed

+113
-16
lines changed

7 files changed

+113
-16
lines changed

spring-security-oauth-resource/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,19 @@
7979
<artifactId>spring-boot-starter-test</artifactId>
8080
</dependency>
8181

82+
<dependency>
83+
<groupId>com.jayway.restassured</groupId>
84+
<artifactId>rest-assured</artifactId>
85+
<version>${rest-assured.version}</version>
86+
<scope>test</scope>
87+
<exclusions>
88+
<exclusion>
89+
<artifactId>commons-logging</artifactId>
90+
<groupId>commons-logging</groupId>
91+
</exclusion>
92+
</exclusions>
93+
</dependency>
94+
8295
</dependencies>
8396

8497
<build>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.baeldung.config;
2+
3+
import java.util.Map;
4+
5+
import org.springframework.security.oauth2.provider.OAuth2Authentication;
6+
import org.springframework.security.oauth2.provider.token.DefaultAccessTokenConverter;
7+
import org.springframework.stereotype.Component;
8+
9+
@Component
10+
public class CustomAccessTokenConverter extends DefaultAccessTokenConverter {
11+
12+
@Override
13+
public OAuth2Authentication extractAuthentication(Map<String, ?> claims) {
14+
OAuth2Authentication authentication = super.extractAuthentication(claims);
15+
authentication.setDetails(claims);
16+
return authentication;
17+
}
18+
19+
}

spring-security-oauth-resource/src/main/java/org/baeldung/config/OAuth2ResourceServerConfig.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,20 @@
44

55
import org.springframework.beans.factory.annotation.Autowired;
66
import org.springframework.context.annotation.Bean;
7-
import org.springframework.context.annotation.Configuration;
87
import org.springframework.context.annotation.Primary;
9-
import org.springframework.context.annotation.PropertySource;
108
import org.springframework.core.env.Environment;
119
import org.springframework.jdbc.datasource.DriverManagerDataSource;
1210
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
1311
import org.springframework.security.config.http.SessionCreationPolicy;
14-
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
1512
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
1613
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
1714
import org.springframework.security.oauth2.provider.token.DefaultTokenServices;
1815
import org.springframework.security.oauth2.provider.token.TokenStore;
1916
import org.springframework.security.oauth2.provider.token.store.JdbcTokenStore;
2017

21-
@Configuration
22-
@PropertySource({ "classpath:persistence.properties" })
23-
@EnableResourceServer
18+
//@Configuration
19+
//@PropertySource({ "classpath:persistence.properties" })
20+
//@EnableResourceServer
2421
public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter {
2522

2623
@Autowired

spring-security-oauth-resource/src/main/java/org/baeldung/config/OAuth2ResourceServerConfigJwt.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,29 @@
33
import java.io.IOException;
44

55
import org.apache.commons.io.IOUtils;
6+
import org.springframework.beans.factory.annotation.Autowired;
67
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
79
import org.springframework.context.annotation.Primary;
810
import org.springframework.core.io.ClassPathResource;
911
import org.springframework.core.io.Resource;
1012
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
1113
import org.springframework.security.config.http.SessionCreationPolicy;
14+
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
1215
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
1316
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
1417
import org.springframework.security.oauth2.provider.token.DefaultTokenServices;
1518
import org.springframework.security.oauth2.provider.token.TokenStore;
1619
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
1720
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
1821

19-
//@Configuration
20-
//@EnableResourceServer
22+
@Configuration
23+
@EnableResourceServer
2124
public class OAuth2ResourceServerConfigJwt extends ResourceServerConfigurerAdapter {
2225

26+
@Autowired
27+
private CustomAccessTokenConverter customAccessTokenConverter;
28+
2329
@Override
2430
public void configure(final HttpSecurity http) throws Exception {
2531
// @formatter:off
@@ -42,6 +48,8 @@ public TokenStore tokenStore() {
4248
@Bean
4349
public JwtAccessTokenConverter accessTokenConverter() {
4450
final JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
51+
converter.setAccessTokenConverter(customAccessTokenConverter);
52+
4553
// converter.setSigningKey("123");
4654
final Resource resource = new ClassPathResource("public.txt");
4755
String publicKey = null;
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.baeldung.test;
2+
3+
import static org.junit.Assert.assertTrue;
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
import org.baeldung.config.ResourceServerApplication;
9+
import org.junit.Test;
10+
import org.junit.runner.RunWith;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.boot.test.context.SpringBootTest;
13+
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
14+
import org.springframework.security.oauth2.provider.OAuth2Authentication;
15+
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
16+
import org.springframework.test.context.junit4.SpringRunner;
17+
18+
import com.jayway.restassured.RestAssured;
19+
import com.jayway.restassured.response.Response;
20+
21+
@RunWith(SpringRunner.class)
22+
@SpringBootTest(classes = ResourceServerApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
23+
public class AuthenticationClaimsIntegrationTest {
24+
25+
@Autowired
26+
private JwtTokenStore tokenStore;
27+
28+
@Test
29+
public void whenTokenDontContainIssuer_thenSuccess() {
30+
final String tokenValue = obtainAccessToken("fooClientIdPassword", "john", "123");
31+
final OAuth2Authentication auth = tokenStore.readAuthentication(tokenValue);
32+
System.out.println(tokenValue);
33+
System.out.println(auth);
34+
assertTrue(auth.isAuthenticated());
35+
System.out.println(auth.getDetails());
36+
37+
Map<String, Object> details = (Map<String, Object>) auth.getDetails();
38+
assertTrue(details.containsKey("organization"));
39+
System.out.println(details.get("organization"));
40+
}
41+
42+
private String obtainAccessToken(String clientId, String username, String password) {
43+
final Map<String, String> params = new HashMap<String, String>();
44+
params.put("grant_type", "password");
45+
params.put("client_id", clientId);
46+
params.put("username", username);
47+
params.put("password", password);
48+
final Response response = RestAssured.given()
49+
.auth()
50+
.preemptive()
51+
.basic(clientId, "secret")
52+
.and()
53+
.with()
54+
.params(params)
55+
.when()
56+
.post("http://localhost:8081/spring-security-oauth-server/oauth/token");
57+
return response.jsonPath()
58+
.getString("access_token");
59+
}
60+
61+
}

spring-security-oauth-server/src/main/java/org/baeldung/config/OAuth2AuthorizationServerConfig.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88
import org.springframework.beans.factory.annotation.Qualifier;
99
import org.springframework.beans.factory.annotation.Value;
1010
import org.springframework.context.annotation.Bean;
11-
import org.springframework.context.annotation.Configuration;
1211
import org.springframework.context.annotation.Primary;
13-
import org.springframework.context.annotation.PropertySource;
1412
import org.springframework.core.env.Environment;
1513
import org.springframework.core.io.Resource;
1614
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@@ -20,7 +18,6 @@
2018
import org.springframework.security.authentication.AuthenticationManager;
2119
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
2220
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
23-
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
2421
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
2522
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
2623
import org.springframework.security.oauth2.provider.token.DefaultTokenServices;
@@ -29,9 +26,9 @@
2926
import org.springframework.security.oauth2.provider.token.TokenStore;
3027
import org.springframework.security.oauth2.provider.token.store.JdbcTokenStore;
3128

32-
@Configuration
33-
@PropertySource({ "classpath:persistence.properties" })
34-
@EnableAuthorizationServer
29+
//@Configuration
30+
//@PropertySource({ "classpath:persistence.properties" })
31+
//@EnableAuthorizationServer
3532
public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
3633

3734
@Autowired

spring-security-oauth-server/src/main/java/org/baeldung/config/OAuth2AuthorizationServerConfigJwt.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
import org.springframework.beans.factory.annotation.Autowired;
66
import org.springframework.beans.factory.annotation.Qualifier;
77
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
89
import org.springframework.context.annotation.Primary;
910
import org.springframework.core.io.ClassPathResource;
1011
import org.springframework.security.authentication.AuthenticationManager;
1112
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
1213
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
14+
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
1315
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
1416
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
1517
import org.springframework.security.oauth2.provider.token.DefaultTokenServices;
@@ -20,8 +22,8 @@
2022
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
2123
import org.springframework.security.oauth2.provider.token.store.KeyStoreKeyFactory;
2224

23-
//@Configuration
24-
//@EnableAuthorizationServer
25+
@Configuration
26+
@EnableAuthorizationServer
2527
public class OAuth2AuthorizationServerConfigJwt extends AuthorizationServerConfigurerAdapter {
2628

2729
@Autowired

0 commit comments

Comments
 (0)