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

Commit 7fa5236

Browse files
committed
Collect verify arguments from specification of client behaviour.
allowed_sign_alg unnecessary.
1 parent 611236d commit 7fa5236

File tree

5 files changed

+31
-5
lines changed

5 files changed

+31
-5
lines changed

src/oidcservice/oidc/access_token.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,11 @@ def gather_verify_arguments(self):
3232
"""
3333
_ctx = self.service_context
3434
# Default is RS256
35-
_allowed_sign_alg = _ctx.registration_response.get("id_token_signed_response_alg", "RS256")
3635

3736
kwargs = {
3837
'client_id': _ctx.client_id, 'iss': _ctx.issuer,
3938
'keyjar': _ctx.keyjar, 'verify': True,
40-
'skew': _ctx.clock_skew, 'allowed_sign_alg': _allowed_sign_alg
39+
'skew': _ctx.clock_skew,
4140
}
4241

4342
for attr, param in IDT2REG.items():
@@ -52,6 +51,10 @@ def gather_verify_arguments(self):
5251
except KeyError:
5352
pass
5453

54+
_verify_args = _ctx.behaviour.get("verify_args")
55+
if _verify_args:
56+
kwargs.update(_verify_args)
57+
5558
return kwargs
5659

5760
def update_service_context(self, resp, key='', **kwargs):

src/oidcservice/oidc/authorization.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def oidc_pre_construct(self, request_args=None, **kwargs):
7777

7878
# For OIDC 'openid' is required in scope
7979
if 'scope' not in request_args:
80-
request_args['scope'] = ['openid']
80+
request_args['scope'] = self.service_context.behaviour.get("scope", ["openid"])
8181
elif 'openid' not in request_args['scope']:
8282
request_args['scope'].append('openid')
8383

@@ -221,4 +221,8 @@ def gather_verify_arguments(self):
221221
except KeyError:
222222
pass
223223

224+
_verify_args = _ctx.behaviour.get("verify_args")
225+
if _verify_args:
226+
kwargs.update(_verify_args)
227+
224228
return kwargs

src/oidcservice/service_context.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def __init__(self, keyjar=None, config=None, **kwargs):
100100

101101
for attr in ['client_id', 'issuer', 'base_url', 'requests_dir',
102102
'allow', 'client_preferences', 'behaviour',
103-
'provider_info', 'redirect_uris', 'callback'
103+
'provider_info', 'redirect_uris', 'callback', 'verify_args'
104104
]:
105105
try:
106106
setattr(self, attr, config[attr])

tests/request123456.jwt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
eyJhbGciOiJSUzI1NiIsImtpZCI6ImFWODBkazlpZG1sbU1YVlBkMUJYV2xGcGIwZFdZVnBHYkRkVVYxSlFWWGRoV0cxVU9HeFNaRkZCYXcifQ.eyJyZXNwb25zZV90eXBlIjogImNvZGUiLCAic3RhdGUiOiAic3RhdGUiLCAicmVkaXJlY3RfdXJpIjogImh0dHBzOi8vZXhhbXBsZS5jb20vY2xpL2F1dGh6X2NiIiwgInNjb3BlIjogIm9wZW5pZCIsICJub25jZSI6ICJheE1QSlByalVacFdERkxUSVYxVVE3Q2RCMzVseHpOcCIsICJjbGllbnRfaWQiOiAiY2xpZW50X2lkIiwgImlzcyI6ICJjbGllbnRfaWQiLCAiaWF0IjogMTU3NDAwNTE2MiwgImF1ZCI6IFsiaHR0cHM6Ly9leGFtcGxlLmNvbSJdfQ.bohgxuuW6EslKVZk_do68TCjx7JMybcvcTFD5MYxFDi2zc0nsMO62uE1eoN_8fd7eprV9G7PJF69lRBOEpszROMsK-nOq7GM1Q8DJIabPF99SF3hKVPNPyPF5ipRLIESG0_I4KB1dY41dOnd5rSeHMLwdNiN5iakjqoeK_LpX0J0DlaCp8RZeMubN6EB1KXHXi6RpWbtprZbvtQha0dCsQ4xfXJTt61CkPH1VEV-8W2orWvmX9fFIznF0Zt06HIinK8EO1_xg88kKmg3JtMrJ9cq8RweM8G2g5xcdRvFrFcVlnBSZwWuDM01oUlowOM20X-9FeQ--I6L2r-8NPUOrw
1+
eyJhbGciOiJSUzI1NiIsImtpZCI6ImFWODBkazlpZG1sbU1YVlBkMUJYV2xGcGIwZFdZVnBHYkRkVVYxSlFWWGRoV0cxVU9HeFNaRkZCYXcifQ.eyJyZXNwb25zZV90eXBlIjogImNvZGUiLCAic3RhdGUiOiAic3RhdGUiLCAicmVkaXJlY3RfdXJpIjogImh0dHBzOi8vZXhhbXBsZS5jb20vY2xpL2F1dGh6X2NiIiwgInNjb3BlIjogIm9wZW5pZCIsICJub25jZSI6ICJxTEtDNmRIUlR0eUVySHhHdmx4emUwNmk4cTg1S1hRciIsICJjbGllbnRfaWQiOiAiY2xpZW50X2lkIiwgImlzcyI6ICJjbGllbnRfaWQiLCAiaWF0IjogMTU4NTg5Nzc0MywgImF1ZCI6IFsiaHR0cHM6Ly9leGFtcGxlLmNvbSJdfQ.kwg9qK9KEUjDrmL7l1Pz9jnPz7Xbtcue7WPlgce1NuX17w8E_ufUGzJoAZwlDN_zC5EQV-fWHGn_H-BfAqE0mRTh5wnQPHyhOT1v5s7FIEHzWF-ITxHIds7ENuYWV9L1RYiOwoNe9rSjrh6YSKJ-eiPTLnERqvIBaJdmwcH4NTM1A2HYGxp_vjCMBu86HRRyCbH7juJO9VIlWTWrgcxUQRM0Tp5Sb5GOZJsnjRpsnIN9dm_CSvzbX4QXk1rDp_z_MOvoQmmrMt1wofUJgpxpVtPfCkh-JHSxpcy2EwxpT6EcQoiy-mMTIOZ_G3pfnzm3pncuySJDgdvPsY4aXd0_CQ

tests/test_13_oic_service.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33

44
import pytest
5+
from cryptojwt.exception import UnsupportedAlgorithm
56
from cryptojwt.jws import jws
67
from cryptojwt.jws.utils import left_hash
78
from cryptojwt.jwt import JWT
@@ -243,6 +244,24 @@ def test_update_service_context_with_idtoken_missing_nonce(self):
243244
with pytest.raises(ValueError):
244245
self.service.update_service_context(resp, 'state')
245246

247+
@pytest.mark.parametrize("allow_sign_alg_none", [True, False])
248+
def test_allow_unsigned_idtoken(self, allow_sign_alg_none):
249+
req_args = {'response_type': 'code', 'state': 'state', 'nonce': 'nonce'}
250+
self.service.endpoint = 'https://example.com/authorize'
251+
self.service.get_request_parameters(request_args=req_args)
252+
# Build an ID Token
253+
idt = JWT(ISS_KEY, iss=ISS, lifetime=3600, sign_alg='none')
254+
payload = {'sub': '123456789', 'aud': ['client_id']}
255+
_idt = idt.pack(payload)
256+
self.service.service_context.behaviour["verify_args"] = {
257+
"allow_sign_alg_none": allow_sign_alg_none
258+
}
259+
resp = AuthorizationResponse(state='state', code='code', id_token=_idt)
260+
if allow_sign_alg_none:
261+
resp = self.service.parse_response(resp.to_urlencoded())
262+
else:
263+
with pytest.raises(UnsupportedAlgorithm):
264+
self.service.parse_response(resp.to_urlencoded())
246265

247266
class TestAuthorizationCallback(object):
248267
@pytest.fixture(autouse=True)

0 commit comments

Comments
 (0)