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

Commit dfb5bdb

Browse files
committed
Refactored.
1 parent 3cef583 commit dfb5bdb

3 files changed

Lines changed: 36 additions & 13 deletions

File tree

src/oidcop/oidc/userinfo.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,8 @@ def process_request(self, request=None, **kwargs):
141141
user_id=_session_info["user_id"], claims_restriction=_claims
142142
)
143143
info["sub"] = _grant.sub
144-
if _claims:
145-
_acr_request = _claims.get("acr")
146-
if _acr_request:
147-
if claims_match(_grant.authentication_event["authn_info"], _acr_request):
148-
info["acr"] = _grant.authentication_event["authn_info"]
144+
if _grant.add_acr_value("userinfo"):
145+
info["acr"] = _grant.authentication_event["authn_info"]
149146
else:
150147
info = {
151148
"error": "invalid_request",

src/oidcop/session/grant.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,14 @@ def find_scope(self, based_on):
181181

182182
return self.scope
183183

184+
def add_acr_value(self, claims_release_point):
185+
_release = self.claims.get(claims_release_point)
186+
if _release:
187+
_acr_request = _release.get("acr")
188+
_used_acr = self.authentication_event.get("authn_info")
189+
return claims_match(_used_acr, _acr_request)
190+
return False
191+
184192
def payload_arguments(
185193
self,
186194
session_id: str,
@@ -223,11 +231,8 @@ def payload_arguments(
223231
payload.update(user_info)
224232

225233
# Should I add the acr value
226-
_release = self.claims.get(claims_release_point)
227-
if _release:
228-
_acr_request = _release.get("acr")
229-
if claims_match(self.authentication_event["authn_info"], _acr_request):
230-
payload["acr"] = self.authentication_event["authn_info"]
234+
if self.add_acr_value(claims_release_point):
235+
payload["acr"] = self.authentication_event["authn_info"]
231236

232237
return payload
233238

tests/test_26_oidc_userinfo_endpoint.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -382,10 +382,11 @@ def test_invalid_token(self):
382382
assert args["error_description"] == "Invalid Token"
383383

384384
def test_userinfo_claims(self):
385+
_acr = "https://refeds.org/profile/mfa"
385386
_auth_req = AUTH_REQ.copy()
386-
_auth_req["claims"] = {"userinfo": {"acr": {"value": "https://refeds.org/profile/mfa"}}}
387+
_auth_req["claims"] = {"userinfo": {"acr": {"value": _acr}}}
387388

388-
session_id = self._create_session(_auth_req, authn_info="https://refeds.org/profile/mfa")
389+
session_id = self._create_session(_auth_req, authn_info=_acr)
389390
grant = self.session_manager[session_id]
390391
code = self._mint_code(grant, session_id)
391392
access_token = self._mint_token("access_token", grant, session_id, code)
@@ -396,4 +397,24 @@ def test_userinfo_claims(self):
396397
args = self.endpoint.process_request(_req)
397398
assert args
398399
res = self.endpoint.do_response(request=_req, **args)
399-
assert res
400+
_response = json.loads(res["response"])
401+
assert _response["acr"] == _acr
402+
403+
def test_userinfo_claims_acr_none(self):
404+
_acr = "https://refeds.org/profile/mfa"
405+
_auth_req = AUTH_REQ.copy()
406+
_auth_req["claims"] = '{"userinfo": {"acr": null}}'
407+
408+
session_id = self._create_session(_auth_req, authn_info=_acr)
409+
grant = self.session_manager[session_id]
410+
code = self._mint_code(grant, session_id)
411+
access_token = self._mint_token("access_token", grant, session_id, code)
412+
413+
http_info = {"headers": {"authorization": "Bearer {}".format(access_token.value)}}
414+
_req = self.endpoint.parse_request({}, http_info=http_info)
415+
416+
args = self.endpoint.process_request(_req)
417+
assert args
418+
res = self.endpoint.do_response(request=_req, **args)
419+
_response = json.loads(res["response"])
420+
assert _response["acr"] == _acr

0 commit comments

Comments
 (0)