@@ -30,7 +30,8 @@ def full_path(local_file):
3030 return os .path .join (BASEDIR , local_file )
3131
3232
33- USERINFO = UserInfo (json .loads (open (full_path ("users.json" )).read ()))
33+ USERS = json .loads (open (full_path ("users.json" )).read ())
34+ USERINFO = UserInfo (USERS )
3435
3536AREQN = AuthorizationRequest (
3637 response_type = "code" ,
@@ -70,6 +71,10 @@ def full_path(local_file):
7071 "kwargs" : {"user" : "diana" },
7172 }
7273 },
74+ "userinfo" : {
75+ "class" : "oidcendpoint.user_info.UserInfo" ,
76+ "kwargs" : {"db" : USERS },
77+ },
7378 "client_authn" : verify_client ,
7479 "template_dir" : "template" ,
7580 "id_token" : {"class" : IDToken , "kwargs" : {"foo" : "bar" }},
@@ -252,3 +257,97 @@ def test_get_sign_algorithm_4(self):
252257 )
253258 # default signing alg
254259 assert algs == {"sign" : True , "encrypt" : False , "sign_alg" : "RS512" }
260+
261+ def test_default_claims (self ):
262+ session_info = {
263+ "authn_req" : AREQN ,
264+ "sub" : "sub" ,
265+ "authn_event" : {
266+ "authn_info" : "loa2" ,
267+ "authn_time" : time .time (),
268+ "uid" : "diana"
269+ },
270+ }
271+ self .endpoint_context .idtoken .kwargs ['default_claims' ] = {
272+ "nickname" : {"essential" : True }
273+ }
274+ req = {"client_id" : "client_1" }
275+ _token = self .endpoint_context .idtoken .make (req , session_info )
276+ assert _token
277+ client_keyjar = KeyJar ()
278+ _jwks = self .endpoint_context .keyjar .export_jwks ()
279+ client_keyjar .import_jwks (_jwks , self .endpoint_context .issuer )
280+ _jwt = JWT (key_jar = client_keyjar , iss = "client_1" )
281+ res = _jwt .unpack (_token )
282+ assert "nickname" in res
283+
284+ def test_no_default_claims (self ):
285+ session_info = {
286+ "authn_req" : AREQN ,
287+ "sub" : "sub" ,
288+ "authn_event" : {
289+ "authn_info" : "loa2" ,
290+ "authn_time" : time .time (),
291+ "uid" : "diana"
292+ },
293+ }
294+ req = {"client_id" : "client_1" }
295+ _token = self .endpoint_context .idtoken .make (req , session_info )
296+ assert _token
297+ client_keyjar = KeyJar ()
298+ _jwks = self .endpoint_context .keyjar .export_jwks ()
299+ client_keyjar .import_jwks (_jwks , self .endpoint_context .issuer )
300+ _jwt = JWT (key_jar = client_keyjar , iss = "client_1" )
301+ res = _jwt .unpack (_token )
302+ assert "nickname" not in res
303+
304+ def test_client_claims (self ):
305+ session_info = {
306+ "authn_req" : AREQN ,
307+ "sub" : "sub" ,
308+ "authn_event" : {
309+ "authn_info" : "loa2" ,
310+ "authn_time" : time .time (),
311+ "uid" : "diana"
312+ },
313+ }
314+ self .endpoint_context .cdb ["client_1" ]['id_token_claims' ] = {
315+ "address" : None
316+ }
317+ req = {"client_id" : "client_1" }
318+ _token = self .endpoint_context .idtoken .make (req , session_info )
319+ assert _token
320+ client_keyjar = KeyJar ()
321+ _jwks = self .endpoint_context .keyjar .export_jwks ()
322+ client_keyjar .import_jwks (_jwks , self .endpoint_context .issuer )
323+ _jwt = JWT (key_jar = client_keyjar , iss = "client_1" )
324+ res = _jwt .unpack (_token )
325+ assert "address" in res
326+ assert "nickname" not in res
327+
328+ def test_client_claims_with_default (self ):
329+ session_info = {
330+ "authn_req" : AREQN ,
331+ "sub" : "sub" ,
332+ "authn_event" : {
333+ "authn_info" : "loa2" ,
334+ "authn_time" : time .time (),
335+ "uid" : "diana"
336+ },
337+ }
338+ self .endpoint_context .cdb ["client_1" ]['id_token_claims' ] = {
339+ "address" : None
340+ }
341+ self .endpoint_context .idtoken .kwargs ['default_claims' ] = {
342+ "nickname" : {"essential" : True }
343+ }
344+ req = {"client_id" : "client_1" }
345+ _token = self .endpoint_context .idtoken .make (req , session_info )
346+ assert _token
347+ client_keyjar = KeyJar ()
348+ _jwks = self .endpoint_context .keyjar .export_jwks ()
349+ client_keyjar .import_jwks (_jwks , self .endpoint_context .issuer )
350+ _jwt = JWT (key_jar = client_keyjar , iss = "client_1" )
351+ res = _jwt .unpack (_token )
352+ assert "address" in res
353+ assert "nickname" in res
0 commit comments