@@ -274,6 +274,19 @@ async def check_allowed(self, username, auth_model):
274
274
auth_model ["admin" ] = True
275
275
return True
276
276
277
+ if self .identity_provider :
278
+ user_info = auth_model ["auth_state" ][self .user_auth_state_key ]
279
+ domain = user_info .get (self .username_claim ).split ('@' , 1 )[- 1 ]
280
+ if domain != self .identity_provider :
281
+ self .log .error (
282
+ f"Trying to login from an identity provider that was not allowed { domain } " ,
283
+ )
284
+ raise HTTPError (
285
+ 403 ,
286
+ f"This site is restricted to { self .identity_provider } accounts. "
287
+ "Please link your account at app.globus.org/account." ,
288
+ )
289
+
277
290
# if allowed_users or allowed_globus_groups is configured, we deny users not part of either
278
291
if self .allowed_users or self .allowed_globus_groups :
279
292
if username in self .allowed_users :
@@ -320,14 +333,7 @@ def user_info_to_username(self, user_info):
320
333
321
334
# It's possible for identity provider domains to be namespaced
322
335
# https://docs.globus.org/api/auth/specification/#identity_provider_namespaces # noqa
323
- username , domain = user_info .get (self .username_claim ).split ('@' , 1 )
324
- if self .identity_provider and domain != self .identity_provider :
325
- raise HTTPError (
326
- 403 ,
327
- f"This site is restricted to { self .identity_provider } accounts. "
328
- "Please link your account at app.globus.org/account." ,
329
- )
330
- return username
336
+ return user_info .get (self .username_claim ).split ('@' )[0 ]
331
337
332
338
def get_default_headers (self ):
333
339
return {"Accept" : "application/json" , "User-Agent" : "JupyterHub" }
0 commit comments