diff --git a/src/IdentityServer/Stores/Default/DefaultRefreshTokenStore.cs b/src/IdentityServer/Stores/Default/DefaultRefreshTokenStore.cs
index f618eb9c4..6ab8cf4f6 100644
--- a/src/IdentityServer/Stores/Default/DefaultRefreshTokenStore.cs
+++ b/src/IdentityServer/Stores/Default/DefaultRefreshTokenStore.cs
@@ -61,35 +61,11 @@ public Task UpdateRefreshTokenAsync(string handle, RefreshToken refreshToken)
///
/// The refresh token handle.
///
- public async Task GetRefreshTokenAsync(string refreshTokenHandle)
+ public Task GetRefreshTokenAsync(string refreshTokenHandle)
{
using var activity = Tracing.StoreActivitySource.StartActivity("DefaultRefreshTokenStore.GetRefreshToken");
- var refreshToken = await GetItemAsync(refreshTokenHandle);
-
- if (refreshToken != null && refreshToken.Version < 5)
- {
-#pragma warning disable CS0618 // Type or member is obsolete
- var user = new IdentityServerUser(refreshToken.AccessToken.SubjectId);
- if (refreshToken.AccessToken.Claims != null)
- {
- foreach (var claim in refreshToken.AccessToken.Claims)
- {
- user.AdditionalClaims.Add(claim);
- }
- }
-
- refreshToken.Subject = user.CreatePrincipal();
- refreshToken.ClientId = refreshToken.AccessToken.ClientId;
- refreshToken.Description = refreshToken.AccessToken.Description;
- refreshToken.AuthorizedScopes = refreshToken.AccessToken.Scopes;
- refreshToken.SetAccessToken(refreshToken.AccessToken);
- refreshToken.AccessToken = null;
- refreshToken.Version = 5;
-#pragma warning restore CS0618 // Type or member is obsolete
- }
-
- return refreshToken;
+ return GetItemAsync(refreshTokenHandle);
}
///
diff --git a/src/Storage/Stores/Serialization/PersistentGrantSerializer.cs b/src/Storage/Stores/Serialization/PersistentGrantSerializer.cs
index 7bbdf0fbe..eb1393e67 100644
--- a/src/Storage/Stores/Serialization/PersistentGrantSerializer.cs
+++ b/src/Storage/Stores/Serialization/PersistentGrantSerializer.cs
@@ -2,6 +2,7 @@
// See LICENSE in the project root for license information.
+using Duende.IdentityServer.Models;
using Microsoft.AspNetCore.DataProtection;
using System;
using System.Text.Json;
@@ -94,7 +95,9 @@ public T Deserialize(string json)
if (container.PersistentGrantDataContainerVersion == 0)
{
- return JsonSerializer.Deserialize(json, Settings);
+ var item = JsonSerializer.Deserialize(json, Settings);
+ PostProcess(item as RefreshToken);
+ return item;
}
if (container.PersistentGrantDataContainerVersion == 1)
@@ -111,11 +114,38 @@ public T Deserialize(string json)
payload = _provider.Unprotect(container.Payload);
}
- return JsonSerializer.Deserialize(payload, Settings);
+ var item = JsonSerializer.Deserialize(payload, Settings);
+ PostProcess(item as RefreshToken);
+ return item;
}
throw new Exception($"Invalid version in persisted grant data: '{container.PersistentGrantDataContainerVersion}'.");
}
+
+ private void PostProcess(RefreshToken refreshToken)
+ {
+ if (refreshToken != null && refreshToken.Version < 5)
+ {
+#pragma warning disable CS0618 // Type or member is obsolete
+ var user = new IdentityServerUser(refreshToken.AccessToken.SubjectId);
+ if (refreshToken.AccessToken.Claims != null)
+ {
+ foreach (var claim in refreshToken.AccessToken.Claims)
+ {
+ user.AdditionalClaims.Add(claim);
+ }
+ }
+
+ refreshToken.Subject = user.CreatePrincipal();
+ refreshToken.ClientId = refreshToken.AccessToken.ClientId;
+ refreshToken.Description = refreshToken.AccessToken.Description;
+ refreshToken.AuthorizedScopes = refreshToken.AccessToken.Scopes;
+ refreshToken.SetAccessToken(refreshToken.AccessToken);
+ refreshToken.AccessToken = null;
+ refreshToken.Version = 5;
+#pragma warning restore CS0618 // Type or member is obsolete
+ }
+ }
}
class PersistentGrantDataContainer