Skip to content
This repository was archived by the owner on Jun 12, 2021. It is now read-only.

Commit ffd419c

Browse files
committed
Add option to disable claims per client
1 parent 956057e commit ffd419c

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/oidcendpoint/id_token.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ class IDToken(object):
112112
def __init__(self, endpoint_context, **kwargs):
113113
self.endpoint_context = endpoint_context
114114
self.kwargs = kwargs
115+
self.enable_claims_per_client = kwargs.get('enable_claims_per_client')
115116
self.scope_to_claims = None
116117
self.provider_info = construct_endpoint_info(
117118
self.default_capabilities, **kwargs
@@ -250,10 +251,9 @@ def make(self, req, sess_info, authn_req=None, user_claims=False, **kwargs):
250251

251252
_cinfo = _context.cdb[_client_id]
252253

253-
idtoken_claims = dict(
254-
self.kwargs.get("default_claims", {}),
255-
**_cinfo.get("id_token_claims", {})
256-
)
254+
idtoken_claims = dict(self.kwargs.get("default_claims", {}))
255+
if self.enable_claims_per_client:
256+
idtoken_claims.update(_cinfo.get("id_token_claims", {}))
257257
lifetime = self.kwargs.get("lifetime")
258258

259259
userinfo = userinfo_in_id_token_claims(

tests/test_03_id_token.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ def test_client_claims(self):
311311
"uid": "diana"
312312
},
313313
}
314+
self.endpoint_context.idtoken.enable_claims_per_client = True
314315
self.endpoint_context.cdb["client_1"]['id_token_claims'] = {
315316
"address": None
316317
}
@@ -341,6 +342,7 @@ def test_client_claims_with_default(self):
341342
self.endpoint_context.idtoken.kwargs['default_claims'] = {
342343
"nickname": {"essential": True}
343344
}
345+
self.endpoint_context.idtoken.enable_claims_per_client = True
344346
req = {"client_id": "client_1"}
345347
_token = self.endpoint_context.idtoken.make(req, session_info)
346348
assert _token
@@ -351,3 +353,27 @@ def test_client_claims_with_default(self):
351353
res = _jwt.unpack(_token)
352354
assert "address" in res
353355
assert "nickname" in res
356+
357+
def test_client_claims_disabled(self):
358+
session_info = {
359+
"authn_req": AREQN,
360+
"sub": "sub",
361+
"authn_event": {
362+
"authn_info": "loa2",
363+
"authn_time": time.time(),
364+
"uid": "diana"
365+
},
366+
}
367+
self.endpoint_context.cdb["client_1"]['id_token_claims'] = {
368+
"address": None
369+
}
370+
req = {"client_id": "client_1"}
371+
_token = self.endpoint_context.idtoken.make(req, session_info)
372+
assert _token
373+
client_keyjar = KeyJar()
374+
_jwks = self.endpoint_context.keyjar.export_jwks()
375+
client_keyjar.import_jwks(_jwks, self.endpoint_context.issuer)
376+
_jwt = JWT(key_jar=client_keyjar, iss="client_1")
377+
res = _jwt.unpack(_token)
378+
assert "address" not in res
379+
assert "nickname" not in res

0 commit comments

Comments
 (0)