1818import org .junit .BeforeClass ;
1919import org .junit .Test ;
2020
21+ import org .opensearch .OpenSearchSecurityException ;
2122import org .opensearch .common .settings .Settings ;
2223import org .opensearch .security .user .AuthCredentials ;
2324import org .opensearch .security .util .FakeRestRequest ;
@@ -44,7 +45,11 @@ public static void tearDown() {
4445
4546 @ Test
4647 public void basicTest () {
47- Settings settings = Settings .builder ().put ("openid_connect_url" , mockIdpServer .getDiscoverUri ()).build ();
48+ Settings settings = Settings .builder ()
49+ .put ("openid_connect_url" , mockIdpServer .getDiscoverUri ())
50+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
51+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
52+ .build ();
4853
4954 HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
5055
@@ -55,12 +60,110 @@ public void basicTest() {
5560 Assert .assertEquals (TestJwts .MCCOY_SUBJECT , creds .getUsername ());
5661 Assert .assertEquals (TestJwts .TEST_AUDIENCE , creds .getAttributes ().get ("attr.jwt.aud" ));
5762 Assert .assertEquals (0 , creds .getBackendRoles ().size ());
58- Assert .assertEquals (3 , creds .getAttributes ().size ());
63+ Assert .assertEquals (4 , creds .getAttributes ().size ());
64+ }
65+
66+
67+ @ Test
68+ public void jwksUriTest () {
69+ Settings settings = Settings .builder ()
70+ .put ("jwks_uri" , mockIdpServer .getJwksUri ())
71+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
72+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
73+ .build ();
74+
75+ HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
76+
77+ AuthCredentials creds = jwtAuth .extractCredentials (new FakeRestRequest (
78+ ImmutableMap .of ("Authorization" , TestJwts .MC_COY_SIGNED_OCT_2 ), new HashMap <>()), null );
79+
80+ Assert .assertNotNull (creds );
81+ Assert .assertEquals (TestJwts .MCCOY_SUBJECT , creds .getUsername ());
82+ Assert .assertEquals (TestJwts .TEST_AUDIENCE , creds .getAttributes ().get ("attr.jwt.aud" ));
83+ Assert .assertEquals (0 , creds .getBackendRoles ().size ());
84+ Assert .assertEquals (4 , creds .getAttributes ().size ());
85+ }
86+
87+ @ Test
88+ public void jwksMissingRequiredIssuerInClaimTest () {
89+ Settings settings = Settings .builder ()
90+ .put ("jwks_uri" , mockIdpServer .getJwksUri ())
91+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
92+ .build ();
93+
94+ HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
95+
96+ AuthCredentials creds = jwtAuth .extractCredentials (new FakeRestRequest (
97+ ImmutableMap .of ("Authorization" , TestJwts .MC_COY_SIGNED_OCT_2 ), new HashMap <>()), null );
98+
99+ Assert .assertNull (creds );
100+ }
101+
102+ @ Test
103+ public void jwksNotMatchingRequiredIssuerInClaimTest () {
104+ Settings settings = Settings .builder ()
105+ .put ("jwks_uri" , mockIdpServer .getJwksUri ())
106+ .put ("required_issuer" , "Wrong Issuer" )
107+ .build ();
108+
109+ HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
110+
111+ AuthCredentials creds = jwtAuth .extractCredentials (new FakeRestRequest (
112+ ImmutableMap .of ("Authorization" , TestJwts .MC_COY_SIGNED_OCT_2 ), new HashMap <>()), null );
113+
114+ Assert .assertNull (creds );
115+ }
116+
117+ @ Test
118+ public void jwksMissingRequiredAudienceInClaimTest () {
119+ Settings settings = Settings .builder ()
120+ .put ("jwks_uri" , mockIdpServer .getJwksUri ())
121+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
122+ .build ();
123+
124+ HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
125+
126+ AuthCredentials creds = jwtAuth .extractCredentials (new FakeRestRequest (
127+ ImmutableMap .of ("Authorization" , TestJwts .MC_COY_SIGNED_OCT_2 ), new HashMap <>()), null );
128+
129+ Assert .assertNull (creds );
130+ }
131+
132+ @ Test
133+ public void jwksNotMatchingRequiredAudienceInClaimTest () {
134+ Settings settings = Settings .builder ()
135+ .put ("jwks_uri" , mockIdpServer .getJwksUri ())
136+ .put ("required_audience" , "Wrong Audience" )
137+ .build ();
138+
139+ HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
140+
141+ AuthCredentials creds = jwtAuth .extractCredentials (new FakeRestRequest (
142+ ImmutableMap .of ("Authorization" , TestJwts .MC_COY_SIGNED_OCT_2 ), new HashMap <>()), null );
143+
144+ Assert .assertNull (creds );
145+ }
146+
147+ @ Test
148+ public void jwksUriMissingTest () {
149+ var exception = Assert .assertThrows (Exception .class , () -> {
150+ HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (Settings .builder ().build (), null );
151+ jwtAuth .extractCredentials (
152+ new FakeRestRequest (ImmutableMap .of ("Authorization" , TestJwts .MC_COY_SIGNED_OCT_1 ), new HashMap <>()),
153+ null );
154+ });
155+
156+ Assert .assertEquals ("Authentication backend failed" , exception .getMessage ());
157+ Assert .assertEquals (OpenSearchSecurityException .class , exception .getClass ());
59158 }
60159
61160 @ Test
62161 public void testEscapeKid () {
63- Settings settings = Settings .builder ().put ("openid_connect_url" , mockIdpServer .getDiscoverUri ()).build ();
162+ Settings settings = Settings .builder ()
163+ .put ("openid_connect_url" , mockIdpServer .getDiscoverUri ())
164+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
165+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
166+ .build ();
64167
65168 HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
66169
@@ -71,12 +174,16 @@ public void testEscapeKid() {
71174 Assert .assertEquals (TestJwts .MCCOY_SUBJECT , creds .getUsername ());
72175 Assert .assertEquals (TestJwts .TEST_AUDIENCE , creds .getAttributes ().get ("attr.jwt.aud" ));
73176 Assert .assertEquals (0 , creds .getBackendRoles ().size ());
74- Assert .assertEquals (3 , creds .getAttributes ().size ());
177+ Assert .assertEquals (4 , creds .getAttributes ().size ());
75178 }
76179
77180 @ Test
78181 public void bearerTest () {
79- Settings settings = Settings .builder ().put ("openid_connect_url" , mockIdpServer .getDiscoverUri ()).build ();
182+ Settings settings = Settings .builder ()
183+ .put ("openid_connect_url" , mockIdpServer .getDiscoverUri ())
184+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
185+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
186+ .build ();
80187
81188 HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
82189
@@ -89,13 +196,17 @@ public void bearerTest() {
89196 Assert .assertEquals (TestJwts .MCCOY_SUBJECT , creds .getUsername ());
90197 Assert .assertEquals (TestJwts .TEST_AUDIENCE , creds .getAttributes ().get ("attr.jwt.aud" ));
91198 Assert .assertEquals (0 , creds .getBackendRoles ().size ());
92- Assert .assertEquals (3 , creds .getAttributes ().size ());
199+ Assert .assertEquals (4 , creds .getAttributes ().size ());
93200 }
94201
95202 @ Test
96203 public void testRoles () throws Exception {
97- Settings settings = Settings .builder ().put ("openid_connect_url" , mockIdpServer .getDiscoverUri ())
98- .put ("roles_key" , TestJwts .ROLES_CLAIM ).build ();
204+ Settings settings = Settings .builder ()
205+ .put ("openid_connect_url" , mockIdpServer .getDiscoverUri ())
206+ .put ("roles_key" , TestJwts .ROLES_CLAIM )
207+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
208+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
209+ .build ();
99210
100211 HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
101212
@@ -126,6 +237,8 @@ public void testExpInSkew() throws Exception {
126237 Settings settings = Settings .builder ()
127238 .put ("openid_connect_url" , mockIdpServer .getDiscoverUri ())
128239 .put ("jwt_clock_skew_tolerance_seconds" , "10" )
240+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
241+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
129242 .build ();
130243
131244 HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
@@ -149,6 +262,8 @@ public void testNbf() throws Exception {
149262 Settings settings = Settings .builder ()
150263 .put ("openid_connect_url" , mockIdpServer .getDiscoverUri ())
151264 .put ("jwt_clock_skew_tolerance_seconds" , "0" )
265+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
266+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
152267 .build ();
153268
154269 HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
@@ -172,6 +287,8 @@ public void testNbfInSkew() throws Exception {
172287 Settings settings = Settings .builder ()
173288 .put ("openid_connect_url" , mockIdpServer .getDiscoverUri ())
174289 .put ("jwt_clock_skew_tolerance_seconds" , "10" )
290+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
291+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
175292 .build ();
176293
177294 HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
@@ -192,7 +309,11 @@ public void testNbfInSkew() throws Exception {
192309 @ Test
193310 public void testRS256 () throws Exception {
194311
195- Settings settings = Settings .builder ().put ("openid_connect_url" , mockIdpServer .getDiscoverUri ()).build ();
312+ Settings settings = Settings .builder ()
313+ .put ("openid_connect_url" , mockIdpServer .getDiscoverUri ())
314+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
315+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
316+ .build ();
196317
197318 HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
198319
@@ -203,7 +324,7 @@ public void testRS256() throws Exception {
203324 Assert .assertEquals (TestJwts .MCCOY_SUBJECT , creds .getUsername ());
204325 Assert .assertEquals (TestJwts .TEST_AUDIENCE , creds .getAttributes ().get ("attr.jwt.aud" ));
205326 Assert .assertEquals (0 , creds .getBackendRoles ().size ());
206- Assert .assertEquals (3 , creds .getAttributes ().size ());
327+ Assert .assertEquals (4 , creds .getAttributes ().size ());
207328 }
208329
209330 @ Test
@@ -221,7 +342,11 @@ public void testBadSignature() throws Exception {
221342
222343 @ Test
223344 public void testPeculiarJsonEscaping () {
224- Settings settings = Settings .builder ().put ("openid_connect_url" , mockIdpServer .getDiscoverUri ()).build ();
345+ Settings settings = Settings .builder ()
346+ .put ("openid_connect_url" , mockIdpServer .getDiscoverUri ())
347+ .put ("required_issuer" , TestJwts .TEST_ISSUER )
348+ .put ("required_audience" , TestJwts .TEST_AUDIENCE )
349+ .build ();
225350
226351 HTTPJwtKeyByOpenIdConnectAuthenticator jwtAuth = new HTTPJwtKeyByOpenIdConnectAuthenticator (settings , null );
227352
@@ -233,7 +358,7 @@ public void testPeculiarJsonEscaping() {
233358 Assert .assertEquals (TestJwts .MCCOY_SUBJECT , creds .getUsername ());
234359 Assert .assertEquals (TestJwts .TEST_AUDIENCE , creds .getAttributes ().get ("attr.jwt.aud" ));
235360 Assert .assertEquals (0 , creds .getBackendRoles ().size ());
236- Assert .assertEquals (3 , creds .getAttributes ().size ());
361+ Assert .assertEquals (4 , creds .getAttributes ().size ());
237362 }
238363
239364}
0 commit comments