Skip to content

Commit f3a8689

Browse files
Traderjoe95tsegismont
authored andcommitted
OAuth2: Allow empty JWTOptions.audience (eclipse-vertx#732)
1 parent 88719ae commit f3a8689

File tree

2 files changed

+281
-2
lines changed

2 files changed

+281
-2
lines changed

vertx-auth-oauth2/src/main/java/io/vertx/ext/auth/oauth2/impl/OAuth2AuthProviderImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ private JsonObject validToken(JsonObject token, boolean idToken) throws IllegalS
644644
}
645645
}
646646

647-
if (target != null && target.size() > 0) {
647+
if (target != null && !target.isEmpty()) {
648648
if (idToken || jwtOptions.getAudience() == null) {
649649
// https://openid.net/specs/openid-connect-core-1_0.html# $3.1.3.7.
650650
// The Client MUST validate that the aud (audience) Claim contains its client_id value registered at the Issuer
@@ -654,7 +654,7 @@ private JsonObject validToken(JsonObject token, boolean idToken) throws IllegalS
654654
if (!target.contains(config.getClientId())) {
655655
throw new IllegalStateException("Invalid JWT audience. expected: " + config.getClientId());
656656
}
657-
} else {
657+
} else if (!jwtOptions.getAudience().isEmpty()) {
658658
if (Collections.disjoint(jwtOptions.getAudience(), target.getList())) {
659659
throw new IllegalStateException("Invalid JWT audience. expected: " + Json.encode(jwtOptions.getAudience()));
660660
}

vertx-auth-oauth2/src/test/java/io/vertx/tests/Oauth2TokenAudienceTest.java

Lines changed: 279 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import org.junit.Test;
1616
import org.junit.runner.RunWith;
1717

18+
import java.util.ArrayList;
19+
1820
@RunWith(VertxUnitRunner.class)
1921
public class Oauth2TokenAudienceTest {
2022

@@ -115,4 +117,281 @@ public void testBadAudience(TestContext should) {
115117
should.fail("Audience is incorrect");
116118
});
117119
}
120+
121+
@Test
122+
public void testGoodDefaultAudience(TestContext should) {
123+
final Async test = should.async();
124+
125+
JsonObject jwk = new JsonObject()
126+
.put("kty", "RSA")
127+
.put("n", "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw")
128+
.put("e", "AQAB")
129+
.put("d", "X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqijwp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBznbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q")
130+
.put("p", "83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs")
131+
.put("q", "3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk")
132+
.put("dp", "G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0")
133+
.put("dq", "s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk")
134+
.put("qi", "GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzgUIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rxyR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU")
135+
.put("alg", "RS256")
136+
.put("kid", "2011-04-29");
137+
138+
OAuth2Options options = new OAuth2Options()
139+
.setClientId("client-id")
140+
.setClientSecret("client-secret")
141+
.addJwk(jwk)
142+
.setJWTOptions(
143+
new JWTOptions()
144+
.setAudience(null));
145+
146+
JWTAuth jwt = JWTAuth.create(rule.vertx(), new JWTAuthOptions().addJwk(jwk));
147+
OAuth2Auth oauth2 = OAuth2Auth.create(rule.vertx(), options);
148+
149+
JsonObject payload = new JsonObject()
150+
.put("sub", "Paulo");
151+
152+
final String token = jwt.generateToken(payload,
153+
new JWTOptions().setAlgorithm("RS256").addAudience("a").addAudience("b").addAudience("client-id"));
154+
155+
should.assertNotNull(token);
156+
157+
TokenCredentials authInfo = new TokenCredentials(token);
158+
159+
oauth2.authenticate(authInfo)
160+
.onFailure(should::fail)
161+
.onSuccess(res -> {
162+
should.assertNotNull(res);
163+
test.complete();
164+
});
165+
}
166+
167+
@Test
168+
public void testBadDefaultAudience(TestContext should) {
169+
final Async test = should.async();
170+
171+
JsonObject jwk = new JsonObject()
172+
.put("kty", "RSA")
173+
.put("n", "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw")
174+
.put("e", "AQAB")
175+
.put("d", "X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqijwp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBznbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q")
176+
.put("p", "83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs")
177+
.put("q", "3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk")
178+
.put("dp", "G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0")
179+
.put("dq", "s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk")
180+
.put("qi", "GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzgUIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rxyR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU")
181+
.put("alg", "RS256")
182+
.put("kid", "2011-04-29");
183+
184+
OAuth2Options options = new OAuth2Options()
185+
.setClientId("client-id")
186+
.setClientSecret("client-secret")
187+
.addJwk(jwk)
188+
.setJWTOptions(
189+
new JWTOptions()
190+
.setAudience(null));
191+
192+
JWTAuth jwt = JWTAuth.create(rule.vertx(), new JWTAuthOptions().addJwk(jwk));
193+
OAuth2Auth oauth2 = OAuth2Auth.create(rule.vertx(), options);
194+
195+
JsonObject payload = new JsonObject()
196+
.put("sub", "Paulo");
197+
198+
final String token = jwt.generateToken(payload,
199+
new JWTOptions().setAlgorithm("RS256").addAudience("a").addAudience("b").addAudience("c"));
200+
201+
should.assertNotNull(token);
202+
203+
TokenCredentials authInfo = new TokenCredentials(token);
204+
205+
oauth2.authenticate(authInfo)
206+
.onFailure(err -> {
207+
test.complete();
208+
})
209+
.onSuccess(res -> {
210+
should.fail("Audience is incorrect");
211+
});
212+
}
213+
214+
@Test
215+
public void testNoAudienceCheck(TestContext should) {
216+
final Async test = should.async();
217+
218+
JsonObject jwk = new JsonObject()
219+
.put("kty", "RSA")
220+
.put("n", "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw")
221+
.put("e", "AQAB")
222+
.put("d", "X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqijwp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBznbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q")
223+
.put("p", "83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs")
224+
.put("q", "3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk")
225+
.put("dp", "G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0")
226+
.put("dq", "s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk")
227+
.put("qi", "GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzgUIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rxyR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU")
228+
.put("alg", "RS256")
229+
.put("kid", "2011-04-29");
230+
231+
OAuth2Options options = new OAuth2Options()
232+
.setClientId("client-id")
233+
.setClientSecret("client-secret")
234+
.addJwk(jwk)
235+
.setJWTOptions(
236+
new JWTOptions()
237+
.setAudience(new ArrayList<>()));
238+
239+
JWTAuth jwt = JWTAuth.create(rule.vertx(), new JWTAuthOptions().addJwk(jwk));
240+
OAuth2Auth oauth2 = OAuth2Auth.create(rule.vertx(), options);
241+
242+
JsonObject payload = new JsonObject()
243+
.put("sub", "Paulo");
244+
245+
final String token = jwt.generateToken(payload,
246+
new JWTOptions().setAlgorithm("RS256").addAudience("a").addAudience("b").addAudience("c"));
247+
248+
should.assertNotNull(token);
249+
250+
TokenCredentials authInfo = new TokenCredentials(token);
251+
252+
oauth2.authenticate(authInfo)
253+
.onFailure(should::fail)
254+
.onSuccess(res -> {
255+
should.assertNotNull(res);
256+
test.complete();
257+
});
258+
}
259+
260+
@Test
261+
public void testTokenWithoutAudience(TestContext should) {
262+
final Async test = should.async();
263+
264+
JsonObject jwk = new JsonObject()
265+
.put("kty", "RSA")
266+
.put("n", "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw")
267+
.put("e", "AQAB")
268+
.put("d", "X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqijwp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBznbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q")
269+
.put("p", "83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs")
270+
.put("q", "3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk")
271+
.put("dp", "G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0")
272+
.put("dq", "s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk")
273+
.put("qi", "GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzgUIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rxyR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU")
274+
.put("alg", "RS256")
275+
.put("kid", "2011-04-29");
276+
277+
OAuth2Options options = new OAuth2Options()
278+
.setClientId("client-id")
279+
.setClientSecret("client-secret")
280+
.addJwk(jwk)
281+
.setJWTOptions(
282+
new JWTOptions()
283+
.addAudience("a"));
284+
285+
JWTAuth jwt = JWTAuth.create(rule.vertx(), new JWTAuthOptions().addJwk(jwk));
286+
OAuth2Auth oauth2 = OAuth2Auth.create(rule.vertx(), options);
287+
288+
JsonObject payload = new JsonObject()
289+
.put("sub", "Paulo");
290+
291+
final String token = jwt.generateToken(payload,
292+
new JWTOptions().setAlgorithm("RS256"));
293+
294+
should.assertNotNull(token);
295+
296+
TokenCredentials authInfo = new TokenCredentials(token);
297+
298+
oauth2.authenticate(authInfo)
299+
.onFailure(should::fail)
300+
.onSuccess(res -> {
301+
should.assertNotNull(res);
302+
test.complete();
303+
});
304+
}
305+
306+
@Test
307+
public void testTokenWithoutAudienceDefaultCheck(TestContext should) {
308+
final Async test = should.async();
309+
310+
JsonObject jwk = new JsonObject()
311+
.put("kty", "RSA")
312+
.put("n", "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw")
313+
.put("e", "AQAB")
314+
.put("d", "X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqijwp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBznbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q")
315+
.put("p", "83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs")
316+
.put("q", "3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk")
317+
.put("dp", "G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0")
318+
.put("dq", "s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk")
319+
.put("qi", "GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzgUIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rxyR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU")
320+
.put("alg", "RS256")
321+
.put("kid", "2011-04-29");
322+
323+
OAuth2Options options = new OAuth2Options()
324+
.setClientId("client-id")
325+
.setClientSecret("client-secret")
326+
.addJwk(jwk)
327+
.setJWTOptions(
328+
new JWTOptions()
329+
.setAudience(null));
330+
331+
JWTAuth jwt = JWTAuth.create(rule.vertx(), new JWTAuthOptions().addJwk(jwk));
332+
OAuth2Auth oauth2 = OAuth2Auth.create(rule.vertx(), options);
333+
334+
JsonObject payload = new JsonObject()
335+
.put("sub", "Paulo");
336+
337+
final String token = jwt.generateToken(payload,
338+
new JWTOptions().setAlgorithm("RS256"));
339+
340+
should.assertNotNull(token);
341+
342+
TokenCredentials authInfo = new TokenCredentials(token);
343+
344+
oauth2.authenticate(authInfo)
345+
.onFailure(should::fail)
346+
.onSuccess(res -> {
347+
should.assertNotNull(res);
348+
test.complete();
349+
});
350+
}
351+
352+
@Test
353+
public void testTokenWithoutAudienceNoCheck(TestContext should) {
354+
final Async test = should.async();
355+
356+
JsonObject jwk = new JsonObject()
357+
.put("kty", "RSA")
358+
.put("n", "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw")
359+
.put("e", "AQAB")
360+
.put("d", "X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqijwp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBznbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFzme1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q")
361+
.put("p", "83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPVnwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqVWlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs")
362+
.put("q", "3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyumqjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgxkIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk")
363+
.put("dp", "G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oimYwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_NmtuYZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0")
364+
.put("dq", "s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUUvMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk")
365+
.put("qi", "GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzgUIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rxyR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU")
366+
.put("alg", "RS256")
367+
.put("kid", "2011-04-29");
368+
369+
OAuth2Options options = new OAuth2Options()
370+
.setClientId("client-id")
371+
.setClientSecret("client-secret")
372+
.addJwk(jwk)
373+
.setJWTOptions(
374+
new JWTOptions()
375+
.setAudience(new ArrayList<>()));
376+
377+
JWTAuth jwt = JWTAuth.create(rule.vertx(), new JWTAuthOptions().addJwk(jwk));
378+
OAuth2Auth oauth2 = OAuth2Auth.create(rule.vertx(), options);
379+
380+
JsonObject payload = new JsonObject()
381+
.put("sub", "Paulo");
382+
383+
final String token = jwt.generateToken(payload,
384+
new JWTOptions().setAlgorithm("RS256"));
385+
386+
should.assertNotNull(token);
387+
388+
TokenCredentials authInfo = new TokenCredentials(token);
389+
390+
oauth2.authenticate(authInfo)
391+
.onFailure(should::fail)
392+
.onSuccess(res -> {
393+
should.assertNotNull(res);
394+
test.complete();
395+
});
396+
}
118397
}

0 commit comments

Comments
 (0)