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