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

Commit a01c7c1

Browse files
authored
Merge pull request #65 from IdentityPython/develop2
Consolidated Pull Request for v2.0.0 development
2 parents 61bde18 + 08c572c commit a01c7c1

142 files changed

Lines changed: 2602 additions & 7393 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,5 @@ venv.bak/
115115
src/oidcendpoint.egg-info/
116116

117117
.iframes/
118+
tests/pairwise.salt
119+
tests/public.salt

doc/source/contents/conf.rst

Lines changed: 133 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,38 @@ issuer
88

99
The issuer ID of the OP, a unique value in URI format.
1010

11+
----
12+
seed
13+
----
14+
15+
Used in dynamic client registration endpoint when creating a new client_secret.
16+
If unset it will be random.
17+
18+
--------
19+
password
20+
--------
21+
22+
Encryption key used to encrypt the SessionID (sid) in access_token.
23+
If unset it will be random.
24+
25+
----
26+
salt
27+
----
28+
29+
Salt, value or filename, used in sub_funcs (pairwise, public) for creating the opaque hash of *sub* claim.
30+
31+
-----------
32+
session_key
33+
-----------
34+
35+
An example::
36+
37+
"session_key": {
38+
"filename": "private/session_jwk.json",
39+
"type": "OCT",
40+
"use": "sig"
41+
},
42+
1143
------
1244
add_on
1345
------
@@ -47,7 +79,7 @@ An example::
4779

4880
"authentication": {
4981
"user": {
50-
"acr": "oidcop.user_authn.authn_context.INTERNETPROTOCOLPASSWORD",
82+
"acr": "urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocolPassword",
5183
"class": "oidcop.user_authn.user.UserPassJinja2",
5284
"kwargs": {
5385
"verify_endpoint": "verify/user",
@@ -195,8 +227,11 @@ An example::
195227
"class": "oidcop.oauth2.introspection.Introspection",
196228
"kwargs": {
197229
"client_authn_method": [
198-
"client_secret_post"
199-
],
230+
"client_secret_post",
231+
"client_secret_basic",
232+
"client_secret_jwt",
233+
"private_key_jwt"
234+
]
200235
"release": [
201236
"username"
202237
]
@@ -266,6 +301,15 @@ An example::
266301
}
267302
}
268303

304+
You can specify which algoritms are supported, for example in userinfo_endpoint::
305+
306+
"userinfo_signing_alg_values_supported": OIDC_SIGN_ALGS,
307+
"userinfo_encryption_alg_values_supported": OIDC_ENC_ALGS,
308+
309+
Or in authorization endpoint::
310+
311+
"request_object_encryption_alg_values_supported": OIDC_ENC_ALGS,
312+
269313
------------
270314
httpc_params
271315
------------
@@ -307,23 +351,40 @@ An example::
307351
"uri_path": "static/jwks.json"
308352
},
309353

354+
*read_only* means that on each restart the keys will created and overwritten with new ones.
355+
This can be useful during the first time the project have been executed, then to keep them as they are *read_only* would be configured to *True*.
356+
310357
---------------
311358
login_hint2acrs
312359
---------------
313360

361+
OIDC Login hint support, it's optional.
362+
It matches the login_hint paramenter to one or more Authentication Contexts.
363+
314364
An example::
315365

316366
"login_hint2acrs": {
317367
"class": "oidcop.login_hint.LoginHint2Acrs",
318368
"kwargs": {
319369
"scheme_map": {
320370
"email": [
321-
"oidcop.user_authn.authn_context.INTERNETPROTOCOLPASSWORD"
371+
"urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocolPassword"
322372
]
323373
}
324374
}
325375
},
326376

377+
oidc-op supports the following authn contexts:
378+
379+
- UNSPECIFIED, urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified
380+
- INTERNETPROTOCOLPASSWORD, urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocolPassword
381+
- MOBILETWOFACTORCONTRACT, urn:oasis:names:tc:SAML:2.0:ac:classes:MobileTwoFactorContract
382+
- PASSWORDPROTECTEDTRANSPORT, urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
383+
- PASSWORD, urn:oasis:names:tc:SAML:2.0:ac:classes:Password
384+
- TLSCLIENT, urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient
385+
- TIMESYNCTOKEN, urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken
386+
387+
327388
-----
328389
authz
329390
-----
@@ -358,31 +419,46 @@ An example::
358419
}
359420
},
360421

361-
362-
-----------
363-
session_key
364-
-----------
365-
366-
An example::
367-
368-
"session_key": {
369-
"filename": "private/session_jwk.json",
370-
"type": "OCT",
371-
"use": "sig"
372-
},
373-
374422
------------
375423
template_dir
376424
------------
377425

426+
The HTML Template directory used by Jinja2, used by endpoint context
427+
template loader, as::
428+
429+
Environment(loader=FileSystemLoader(template_dir), autoescape=True)
430+
378431
An example::
379432

380433
"template_dir": "templates"
381434

435+
For any further customization of template here an example of what used in django-oidc-op
436+
437+
"authentication": {
438+
"user": {
439+
"acr": "urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocolPassword",
440+
"class": "oidc_provider.users.UserPassDjango",
441+
"kwargs": {
442+
"verify_endpoint": "verify/oidc_user_login/",
443+
"template": "oidc_login.html",
444+
445+
"page_header": "Testing log in",
446+
"submit_btn": "Get me in!",
447+
"user_label": "Nickname",
448+
"passwd_label": "Secret sauce"
449+
}
450+
}
451+
},
452+
382453
------------------
383454
token_handler_args
384455
------------------
385456

457+
Token handler is an intermediate interface used by and endpoint to manage
458+
the tokens' default behaviour, like lifetime and minting policies.
459+
With it we can create a token that's linked to another, and keep relations between many tokens
460+
in session and grants management.
461+
386462
An example::
387463

388464
"token_handler_args": {
@@ -442,6 +518,44 @@ An example::
442518
}
443519
}
444520

521+
jwks_defs can be replaced eventually by `jwks_file`::
522+
523+
"jwks_file": f"{OIDC_JWKS_PRIVATE_PATH}/token_jwks.json",
524+
525+
You can even select wich algorithms to support in id_token, eg::
526+
527+
"id_token": {
528+
"class": "oidcop.token.id_token.IDToken",
529+
"kwargs": {
530+
"id_token_signing_alg_values_supported": [
531+
"RS256",
532+
"RS512",
533+
"ES256",
534+
"ES512",
535+
"PS256",
536+
"PS512",
537+
],
538+
"id_token_encryption_alg_values_supported": [
539+
"RSA-OAEP",
540+
"RSA-OAEP-256",
541+
"A192KW",
542+
"A256KW",
543+
"ECDH-ES",
544+
"ECDH-ES+A128KW",
545+
"ECDH-ES+A192KW",
546+
"ECDH-ES+A256KW",
547+
],
548+
"id_token_encryption_enc_values_supported": [
549+
'A128CBC-HS256',
550+
'A192CBC-HS384',
551+
'A256CBC-HS512',
552+
'A128GCM',
553+
'A192GCM',
554+
'A256GCM'
555+
],
556+
}
557+
}
558+
445559
--------
446560
userinfo
447561
--------
@@ -456,8 +570,8 @@ An example::
456570
}
457571

458572
This is somethig that can be customized.
459-
For example in a django project we would use something like
460-
the following (see `example/django_op/oidc_provider`)::
573+
For example in the django-oidc-op implementation is used something like
574+
the following::
461575

462576
"userinfo": {
463577
"class": "oidc_provider.users.UserInfo",

0 commit comments

Comments
 (0)