diff --git a/oauth2_provider/migrations/0007_alter_idtoken_jti.py b/oauth2_provider/migrations/0007_alter_idtoken_jti.py new file mode 100644 index 000000000..eb5ab37f0 --- /dev/null +++ b/oauth2_provider/migrations/0007_alter_idtoken_jti.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.15 on 2023-04-06 20:58 + +from django.db import migrations, models +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('oauth2_provider', '0006_auto_20230330_1837'), + ] + + operations = [ + migrations.AlterField( + model_name='idtoken', + name='jti', + field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True), + ), + ] diff --git a/oauth2_provider/models.py b/oauth2_provider/models.py index fc5e0330d..ee1463569 100644 --- a/oauth2_provider/models.py +++ b/oauth2_provider/models.py @@ -507,11 +507,7 @@ class AbstractIDToken(models.Model): related_name="%(app_label)s_%(class)s", ) token = models.TextField(unique=True) - jti = models.UUIDField( - blank=True, - null=True, - verbose_name="JWT Token ID" - ) + jti = models.UUIDField(unique=True, default=uuid.uuid4, editable=False, verbose_name="JWT Token ID") application = models.ForeignKey( oauth2_settings.APPLICATION_MODEL, on_delete=models.CASCADE, diff --git a/oauth2_provider/oauth2_validators.py b/oauth2_provider/oauth2_validators.py index f42cdf57d..13d6dbba3 100644 --- a/oauth2_provider/oauth2_validators.py +++ b/oauth2_provider/oauth2_validators.py @@ -817,10 +817,8 @@ def _load_id_token(self, token): return None try: jwt_token = jwt.JWT(key=key, jwt=token) - # TODO sc-77179: Once double write is live, we can read from jti - # claims = json.loads(jwt_token.claims) - # return IDToken.objects.get(jti=claims["jti"]) - return IDToken.objects.get(token=jwt_token.serialize()) + claims = json.loads(jwt_token.claims) + return IDToken.objects.get(jti=claims["jti"]) except (JWException, JWTExpired, IDToken.DoesNotExist): return None diff --git a/setup.cfg b/setup.cfg index 551d60960..0ceb0b0e9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = django-oauth-toolkit -version = 1.5.1 +version = 1.5.2 description = OAuth2 Provider for Django long_description = file: README.rst long_description_content_type = text/x-rst