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

Commit cef27f1

Browse files
authored
Merge pull request #61 from IdentityPython/get_client_id
Get client
2 parents 3ae9a7c + 463a734 commit cef27f1

12 files changed

+51
-359
lines changed

.github/workflows/python-app.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ jobs:
1818
fail-fast: false
1919
matrix:
2020
python-version:
21-
- '3.6'
2221
- '3.7'
2322
- '3.8'
2423
- '3.9'
24+
- '3.10'
2525

2626
steps:
2727
- uses: actions/checkout@v2

setup.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,13 @@ def run_tests(self):
6868
classifiers=[
6969
"Development Status :: 5 - Production/Stable",
7070
"License :: OSI Approved :: Apache Software License",
71-
"Programming Language :: Python :: 3.6",
7271
"Programming Language :: Python :: 3.7",
7372
"Programming Language :: Python :: 3.8",
7473
"Programming Language :: Python :: 3.9",
74+
"Programming Language :: Python :: 3.10",
7575
"Topic :: Software Development :: Libraries :: Python Modules"],
7676
install_requires=[
77-
'oidcmsg==1.5.4',
77+
'oidcmsg==1.6.0',
7878
'pyyaml>=5.1.2',
7979
'responses'
8080
],

src/oidcrp/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import logging
22

33
__author__ = 'Roland Hedberg'
4-
__version__ = '2.1.3'
4+
__version__ = '2.1.4'
55

66
logger = logging.getLogger(__name__)
77

src/oidcrp/client_auth.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ def _get_audience_and_algorithm(self, context, **kwargs):
482482

483483
def _construct_client_assertion(self, service, **kwargs):
484484
_context = service.client_get("service_context")
485-
485+
_entity = service.client_get("entity")
486486
audience, algorithm = self._get_audience_and_algorithm(_context, **kwargs)
487487

488488
if 'kid' in kwargs:
@@ -500,7 +500,7 @@ def _construct_client_assertion(self, service, **kwargs):
500500

501501
# construct the signed JWT with the assertions and add
502502
# it as value to the 'client_assertion' claim of the request
503-
return assertion_jwt(_context.client_id, signing_key, audience, algorithm, **_args)
503+
return assertion_jwt(_entity.get_client_id(), signing_key, audience, algorithm, **_args)
504504

505505
def modify_request(self, request, service, **kwargs):
506506
"""

src/oidcrp/entity.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,6 @@ def __init__(self,
4242
self._service_context = ServiceContext(keyjar=keyjar, config=config,
4343
jwks_uri=jwks_uri, httpc_params=self.httpc_params)
4444

45-
_cid = self._service_context.get('client_id')
46-
if _cid:
47-
self.client_id = _cid
48-
4945
_cam = client_authn_factory or factory
5046

5147
_srvs = services or DEFAULT_SERVICES
@@ -78,3 +74,9 @@ def get_service_by_endpoint_name(self, endpoint_name, *arg):
7874
return service
7975

8076
return None
77+
78+
def get_entity(self):
79+
return self
80+
81+
def get_client_id(self):
82+
return self._service_context.client_id

src/oidcrp/oauth2/__init__.py

-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ def do_request(self,
9999
state=_state, **_info)
100100

101101
def set_client_id(self, client_id):
102-
self.client_id = client_id
103102
self._service_context.set('client_id', client_id)
104103

105104
def get_response(self,

src/oidcrp/oidc/access_token.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ def gather_verify_arguments(self,
3737
:return: dictionary with arguments to the verify call
3838
"""
3939
_context = self.client_get("service_context")
40-
# Default is RS256
40+
_entity = self.client_get("entity")
4141

4242
kwargs = {
43-
'client_id': _context.client_id,
43+
'client_id': _entity.get_client_id(),
4444
'iss': _context.issuer,
4545
'keyjar': _context.keyjar,
4646
'verify': True,

src/oidcrp/rp_handler.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ def do_client_registration(self, client=None,
277277
# if _context.callback.get("post_logout_redirect_uri") is None:
278278
# _context.callback["post_logout_redirect_uri"] = [self.base_url]
279279

280-
if not _context.client_id: # means I have to do dynamic client registration
280+
if not client.get_client_id(): # means I have to do dynamic client registration
281281
if request_args is None:
282282
request_args = {}
283283

@@ -514,7 +514,7 @@ def get_tokens(self, state, client: Optional[Client] = None):
514514
'state': state,
515515
'redirect_uri': authorization_request['redirect_uri'],
516516
'grant_type': 'authorization_code',
517-
'client_id': _context.get('client_id'),
517+
'client_id': client.get_client_id(),
518518
'client_secret': _context.get('client_secret')
519519
}
520520
logger.debug('request_args: {}'.format(req_args))
@@ -956,7 +956,7 @@ def backchannel_logout(client, request='', request_args=None):
956956

957957
_context = client.client_get("service_context")
958958
kwargs = {
959-
'aud': _context.get('client_id'),
959+
'aud': client.get_client_id(),
960960
'iss': _context.get('issuer'),
961961
'keyjar': _context.keyjar,
962962
'allowed_sign_alg': _context.get('registration_response').get(

src/oidcrp/service.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -460,9 +460,8 @@ def gather_verify_arguments(self,
460460
'verify': True
461461
}
462462

463-
_client_id = _context.client_id
464-
if _client_id:
465-
kwargs['client_id'] = _client_id
463+
_entity = self.client_get("entity")
464+
kwargs['client_id'] = _entity.get_client_id()
466465

467466
if self.service_name == "provider_info":
468467
if _context.issuer.startswith("http://"):

tests/pub_client.jwks

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"keys": [{"kty": "RSA", "use": "sig", "kid": "SUswNi1MRFlDT0Y2YjU1Z1RfQlo2S3dEa3FTTkV3LThFcnhDTHF5elk2VQ", "e": "AQAB", "n": "0UkUx2ewKyc-XJ1o0ToyGjws_JybAMZj2oYjsPyyvQ_T5dhZ2VmRRRkhsaVJ2xE_GGc7mSG0IjmGFyXp5y0w4mJBcsAEE5-8eBTvQdYIryjW74r3jt6Fi4Hlm1yFMTie3apv8mw79BUj-jT0kh3_m-FiKKUvLsq45DcLtTJ4cx7Ize37dl1sFSpQcoYMk7eiUEM8fiNboiVwvBYNAWVMkUM-LnVUPm3UjvKp0LihYEkZFWOxmuQmj2x25SFUkjus38ERrRqJQBZduxdBHFrWtWg8yOA53BkMU0FFg_r0H3ctl-5GaKw-BWlogU4qXnsq85xy0EoenRk7FPV8g_ulJw"}, {"kty": "EC", "use": "sig", "kid": "NC1pdGRQN002bWM3bk1xX2R0SktscElqbFdtN29ITDV2WVd2b0hOYzREVQ", "crv": "P-256", "x": "kK7Qp1woSerI7rUOAwW_4sU6ZmwV3wwXKX3VU-v2fMI", "y": "iPWd_Pjq6EjxYy08KNFZ3PxhEwgWHgAQTTknlKMKJA0"}]}
1+
{"keys": [{"kty": "RSA", "use": "sig", "kid": "SUswNi1MRFlDT0Y2YjU1Z1RfQlo2S3dEa3FTTkV3LThFcnhDTHF5elk2VQ", "n": "0UkUx2ewKyc-XJ1o0ToyGjws_JybAMZj2oYjsPyyvQ_T5dhZ2VmRRRkhsaVJ2xE_GGc7mSG0IjmGFyXp5y0w4mJBcsAEE5-8eBTvQdYIryjW74r3jt6Fi4Hlm1yFMTie3apv8mw79BUj-jT0kh3_m-FiKKUvLsq45DcLtTJ4cx7Ize37dl1sFSpQcoYMk7eiUEM8fiNboiVwvBYNAWVMkUM-LnVUPm3UjvKp0LihYEkZFWOxmuQmj2x25SFUkjus38ERrRqJQBZduxdBHFrWtWg8yOA53BkMU0FFg_r0H3ctl-5GaKw-BWlogU4qXnsq85xy0EoenRk7FPV8g_ulJw", "e": "AQAB"}, {"kty": "EC", "use": "sig", "kid": "NC1pdGRQN002bWM3bk1xX2R0SktscElqbFdtN29ITDV2WVd2b0hOYzREVQ", "crv": "P-256", "x": "kK7Qp1woSerI7rUOAwW_4sU6ZmwV3wwXKX3VU-v2fMI", "y": "iPWd_Pjq6EjxYy08KNFZ3PxhEwgWHgAQTTknlKMKJA0"}]}

tests/test_20_rp_handler_oidc.py

+17-11
Original file line numberDiff line numberDiff line change
@@ -431,12 +431,13 @@ def test_get_tokens(self):
431431
client = self.rph.issuer2rp[_session['iss']]
432432

433433
_github_id = iss_id('github')
434-
client.client_get("service_context").keyjar.import_jwks(
434+
_context = client.client_get("service_context")
435+
_context.keyjar.import_jwks(
435436
GITHUB_KEY.export_jwks(issuer_id=_github_id), _github_id)
436437

437438
_nonce = _session['auth_request']['nonce']
438439
_iss = _session['iss']
439-
_aud = client.client_id
440+
_aud = _context.client_id
440441
idval = {
441442
'nonce': _nonce, 'sub': 'EndUserSubject', 'iss': _iss,
442443
'aud': _aud
@@ -479,16 +480,17 @@ def test_access_and_id_token(self):
479480
res = self.rph.begin(issuer_id='github')
480481
_session = self.rph.get_session_information(res['state'])
481482
client = self.rph.issuer2rp[_session['iss']]
483+
_context = client.client_get("service_context")
482484
_nonce = _session['auth_request']['nonce']
483485
_iss = _session['iss']
484-
_aud = client.client_id
486+
_aud = _context.client_id
485487
idval = {
486488
'nonce': _nonce, 'sub': 'EndUserSubject', 'iss': _iss,
487489
'aud': _aud
488490
}
489491

490492
_github_id = iss_id('github')
491-
client.client_get("service_context").keyjar.import_jwks(
493+
_context.keyjar.import_jwks(
492494
GITHUB_KEY.export_jwks(issuer_id=_github_id), _github_id)
493495

494496
idts = IdToken(**idval)
@@ -520,16 +522,17 @@ def test_access_and_id_token_by_reference(self):
520522
res = self.rph.begin(issuer_id='github')
521523
_session = self.rph.get_session_information(res['state'])
522524
client = self.rph.issuer2rp[_session['iss']]
525+
_context = client.client_get("service_context")
523526
_nonce = _session['auth_request']['nonce']
524527
_iss = _session['iss']
525-
_aud = client.client_id
528+
_aud = _context.client_id
526529
idval = {
527530
'nonce': _nonce, 'sub': 'EndUserSubject', 'iss': _iss,
528531
'aud': _aud
529532
}
530533

531534
_github_id = iss_id('github')
532-
client.client_get("service_context").keyjar.import_jwks(
535+
_context.keyjar.import_jwks(
533536
GITHUB_KEY.export_jwks(issuer_id=_github_id), _github_id)
534537

535538
idts = IdToken(**idval)
@@ -561,16 +564,17 @@ def test_get_user_info(self):
561564
res = self.rph.begin(issuer_id='github')
562565
_session = self.rph.get_session_information(res['state'])
563566
client = self.rph.issuer2rp[_session['iss']]
567+
_context = client.client_get("service_context")
564568
_nonce = _session['auth_request']['nonce']
565569
_iss = _session['iss']
566-
_aud = client.client_id
570+
_aud = _context.client_id
567571
idval = {
568572
'nonce': _nonce, 'sub': 'EndUserSubject', 'iss': _iss,
569573
'aud': _aud
570574
}
571575

572576
_github_id = iss_id('github')
573-
client.client_get("service_context").keyjar.import_jwks(
577+
_context.keyjar.import_jwks(
574578
GITHUB_KEY.export_jwks(issuer_id=_github_id), _github_id)
575579

576580
idts = IdToken(**idval)
@@ -612,9 +616,10 @@ def test_userinfo_in_id_token(self):
612616
res = self.rph.begin(issuer_id='github')
613617
_session = self.rph.get_session_information(res['state'])
614618
client = self.rph.issuer2rp[_session['iss']]
619+
_context = client.client_get("service_context")
615620
_nonce = _session['auth_request']['nonce']
616621
_iss = _session['iss']
617-
_aud = client.client_id
622+
_aud = _context.client_id
618623
idval = {
619624
'nonce': _nonce, 'sub': 'EndUserSubject', 'iss': _iss,
620625
'aud': _aud, 'given_name': 'Diana', 'family_name': 'Krall',
@@ -645,16 +650,17 @@ def rphandler_setup(self):
645650
res = self.rph.begin(issuer_id='github')
646651
_session = self.rph.get_session_information(res['state'])
647652
client = self.rph.issuer2rp[_session['iss']]
653+
_context = client.client_get("service_context")
648654
_nonce = _session['auth_request']['nonce']
649655
_iss = _session['iss']
650-
_aud = client.client_id
656+
_aud = _context.client_id
651657
idval = {
652658
'nonce': _nonce, 'sub': 'EndUserSubject', 'iss': _iss,
653659
'aud': _aud
654660
}
655661

656662
_github_id = iss_id('github')
657-
client.client_get("service_context").keyjar.import_jwks(
663+
_context.keyjar.import_jwks(
658664
GITHUB_KEY.export_jwks(issuer_id=_github_id), _github_id)
659665

660666
idts = IdToken(**idval)

0 commit comments

Comments
 (0)