Authn_Broker fixed

Authn_Broker for comparison 'exact' should return all methods matching
from RequestedAuthnContext.
Default comparison of omitted should be 'exact'
This commit is contained in:
tpazderka
2014-12-18 11:38:50 +01:00
parent cf7b831ee0
commit 9d96905d8b
2 changed files with 28 additions and 4 deletions

View File

@@ -166,14 +166,20 @@ class AuthnBroker(object):
if req_authn_context.comparison:
_cmp = req_authn_context.comparison
else:
_cmp = "minimum"
return self._pick_by_class_ref(
req_authn_context.authn_context_class_ref[0].text, _cmp)
_cmp = "exact"
if _cmp == 'exact':
res = []
for cls_ref in req_authn_context.authn_context_class_ref:
res += (self._pick_by_class_ref(cls_ref.text, _cmp))
return res
else:
return self._pick_by_class_ref(
req_authn_context.authn_context_class_ref[0].text, _cmp)
elif req_authn_context.authn_context_decl_ref:
if req_authn_context.comparison:
_cmp = req_authn_context.comparison
else:
_cmp = "minimum"
_cmp = "exact"
return self._pick_by_class_ref(
req_authn_context.authn_context_decl_ref, _cmp)

View File

@@ -142,6 +142,24 @@ def test_authn_3():
method, ref = info[0]
assert REF2METHOD[AL1] == method
rac = requested_authn_context([AL1, AL2], "exact")
info = authn.pick(rac)
assert len(info) == 2
method, ref = info[0]
assert REF2METHOD[AL1] == method
method, ref = info[1]
assert REF2METHOD[AL2] == method
rac = requested_authn_context([AL3, AL2], "exact")
info = authn.pick(rac)
assert len(info) == 2
method, ref = info[0]
assert REF2METHOD[AL3] == method
method, ref = info[1]
assert REF2METHOD[AL2] == method
rac = requested_authn_context(AL1, "better")
info = authn.pick(rac)