summaryrefslogtreecommitdiff
path: root/oauthlib
diff options
context:
space:
mode:
authorNikos Sklikas <nsklikas@admin.grnet.gr>2021-03-22 16:38:38 +0200
committerNikos Sklikas <nsklikas@admin.grnet.gr>2021-06-03 18:00:12 +0300
commit595bf5f98ab785aa64840ed469fb1b9dc09bdb9e (patch)
tree11d8e9fe68726582cba3ce6f1d4420e6db5d135b /oauthlib
parent5a1e7483749229e01442cfb969916a14a2078789 (diff)
downloadoauthlib-595bf5f98ab785aa64840ed469fb1b9dc09bdb9e.tar.gz
Add support for refreshing ID Tokens
Diffstat (limited to 'oauthlib')
-rw-r--r--oauthlib/openid/connect/core/grant_types/__init__.py1
-rw-r--r--oauthlib/openid/connect/core/grant_types/refresh_token.py36
2 files changed, 37 insertions, 0 deletions
diff --git a/oauthlib/openid/connect/core/grant_types/__init__.py b/oauthlib/openid/connect/core/grant_types/__init__.py
index 887a585..8dad5f6 100644
--- a/oauthlib/openid/connect/core/grant_types/__init__.py
+++ b/oauthlib/openid/connect/core/grant_types/__init__.py
@@ -10,3 +10,4 @@ from .dispatchers import (
)
from .hybrid import HybridGrant
from .implicit import ImplicitGrant
+from .refresh_token import RefreshTokenGrant
diff --git a/oauthlib/openid/connect/core/grant_types/refresh_token.py b/oauthlib/openid/connect/core/grant_types/refresh_token.py
new file mode 100644
index 0000000..386b57c
--- /dev/null
+++ b/oauthlib/openid/connect/core/grant_types/refresh_token.py
@@ -0,0 +1,36 @@
+"""
+oauthlib.openid.connect.core.grant_types
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+"""
+import logging
+
+from oauthlib.oauth2.rfc6749.grant_types.refresh_token import (
+ RefreshTokenGrant as OAuth2RefreshTokenGrant,
+)
+
+from .base import GrantTypeBase
+
+log = logging.getLogger(__name__)
+
+
+class RefreshTokenGrant(GrantTypeBase):
+
+ def __init__(self, refresh_id_token=True, request_validator=None, **kwargs):
+ self.refresh_id_token = refresh_id_token
+ self.proxy_target = OAuth2RefreshTokenGrant(
+ request_validator=request_validator, **kwargs)
+ self.register_token_modifier(self.add_id_token)
+
+ def add_id_token(self, token, token_handler, request):
+ """
+ Construct an initial version of id_token, and let the
+ request_validator sign or encrypt it.
+
+ The authorization_code version of this method is used to
+ retrieve the nonce accordingly to the code storage.
+ """
+ # Treat it as normal OAuth 2 auth code request if openid is not present
+ if not self.refresh_id_token:
+ return token
+
+ return super().add_id_token(token, token_handler, request)