From 54e6b9eded54a34956135268387b8fe5c9293f65 Mon Sep 17 00:00:00 2001 From: Brock Allen Date: Wed, 9 Mar 2022 15:27:12 -0500 Subject: [PATCH] add identity column to persisted grants table --- .../Migrations/ConfigurationDb.sql | 2 +- ... 20220309202515_Configuration.Designer.cs} | 2 +- ...ion.cs => 20220309202515_Configuration.cs} | 0 .../Migrations/PersistedGrantDb.sql | 10 +++++++--- ...r.cs => 20220309202509_Grants.Designer.cs} | 20 ++++++++++++++----- ...126_Grants.cs => 20220309202509_Grants.cs} | 13 ++++++++++-- .../PersistedGrantDbContextModelSnapshot.cs | 18 +++++++++++++---- .../Entities/PersistedGrant.cs | 3 ++- .../Extensions/ModelBuilderExtensions.cs | 7 ++++--- 9 files changed, 55 insertions(+), 20 deletions(-) rename migrations/IdentityServerDb/Migrations/ConfigurationDb/{20220217183132_Configuration.Designer.cs => 20220309202515_Configuration.Designer.cs} (99%) rename migrations/IdentityServerDb/Migrations/ConfigurationDb/{20220217183132_Configuration.cs => 20220309202515_Configuration.cs} (100%) rename migrations/IdentityServerDb/Migrations/PersistedGrantDb/{20220217183126_Grants.Designer.cs => 20220309202509_Grants.Designer.cs} (94%) rename migrations/IdentityServerDb/Migrations/PersistedGrantDb/{20220217183126_Grants.cs => 20220309202509_Grants.cs} (94%) diff --git a/migrations/IdentityServerDb/Migrations/ConfigurationDb.sql b/migrations/IdentityServerDb/Migrations/ConfigurationDb.sql index 24104430c..8e6bd0257 100644 --- a/migrations/IdentityServerDb/Migrations/ConfigurationDb.sql +++ b/migrations/IdentityServerDb/Migrations/ConfigurationDb.sql @@ -360,7 +360,7 @@ CREATE UNIQUE INDEX [IX_IdentityResources_Name] ON [IdentityResources] ([Name]); GO INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20220217183132_Configuration', N'6.0.0'); +VALUES (N'20220309202515_Configuration', N'6.0.0'); GO COMMIT; diff --git a/migrations/IdentityServerDb/Migrations/ConfigurationDb/20220217183132_Configuration.Designer.cs b/migrations/IdentityServerDb/Migrations/ConfigurationDb/20220309202515_Configuration.Designer.cs similarity index 99% rename from migrations/IdentityServerDb/Migrations/ConfigurationDb/20220217183132_Configuration.Designer.cs rename to migrations/IdentityServerDb/Migrations/ConfigurationDb/20220309202515_Configuration.Designer.cs index 4f77eb9b1..7edc1c06b 100644 --- a/migrations/IdentityServerDb/Migrations/ConfigurationDb/20220217183132_Configuration.Designer.cs +++ b/migrations/IdentityServerDb/Migrations/ConfigurationDb/20220309202515_Configuration.Designer.cs @@ -12,7 +12,7 @@ namespace IdentityServerDb.Migrations.ConfigurationDb { [DbContext(typeof(ConfigurationDbContext))] - [Migration("20220217183132_Configuration")] + [Migration("20220309202515_Configuration")] partial class Configuration { protected override void BuildTargetModel(ModelBuilder modelBuilder) diff --git a/migrations/IdentityServerDb/Migrations/ConfigurationDb/20220217183132_Configuration.cs b/migrations/IdentityServerDb/Migrations/ConfigurationDb/20220309202515_Configuration.cs similarity index 100% rename from migrations/IdentityServerDb/Migrations/ConfigurationDb/20220217183132_Configuration.cs rename to migrations/IdentityServerDb/Migrations/ConfigurationDb/20220309202515_Configuration.cs diff --git a/migrations/IdentityServerDb/Migrations/PersistedGrantDb.sql b/migrations/IdentityServerDb/Migrations/PersistedGrantDb.sql index f0f8f3875..a9d1f93a6 100644 --- a/migrations/IdentityServerDb/Migrations/PersistedGrantDb.sql +++ b/migrations/IdentityServerDb/Migrations/PersistedGrantDb.sql @@ -39,7 +39,8 @@ CREATE TABLE [Keys] ( GO CREATE TABLE [PersistedGrants] ( - [Key] nvarchar(200) NOT NULL, + [Id] int NOT NULL IDENTITY, + [Key] nvarchar(200) NULL, [Type] nvarchar(50) NOT NULL, [SubjectId] nvarchar(200) NULL, [SessionId] nvarchar(100) NULL, @@ -49,7 +50,7 @@ CREATE TABLE [PersistedGrants] ( [Expiration] datetime2 NULL, [ConsumedTime] datetime2 NULL, [Data] nvarchar(max) NOT NULL, - CONSTRAINT [PK_PersistedGrants] PRIMARY KEY ([Key]) + CONSTRAINT [PK_PersistedGrants] PRIMARY KEY ([Id]) ); GO @@ -83,6 +84,9 @@ GO CREATE INDEX [IX_PersistedGrants_Expiration] ON [PersistedGrants] ([Expiration]); GO +CREATE UNIQUE INDEX [IX_PersistedGrants_Key] ON [PersistedGrants] ([Key]) WHERE [Key] IS NOT NULL; +GO + CREATE INDEX [IX_PersistedGrants_SubjectId_ClientId_Type] ON [PersistedGrants] ([SubjectId], [ClientId], [Type]); GO @@ -93,7 +97,7 @@ CREATE UNIQUE INDEX [IX_ServerSideSessions_Key] ON [ServerSideSessions] ([Key]); GO INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20220217183126_Grants', N'6.0.0'); +VALUES (N'20220309202509_Grants', N'6.0.0'); GO COMMIT; diff --git a/migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220217183126_Grants.Designer.cs b/migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220309202509_Grants.Designer.cs similarity index 94% rename from migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220217183126_Grants.Designer.cs rename to migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220309202509_Grants.Designer.cs index 37973317a..bda385ea4 100644 --- a/migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220217183126_Grants.Designer.cs +++ b/migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220309202509_Grants.Designer.cs @@ -12,7 +12,7 @@ namespace IdentityServerDb.Migrations.PersistedGrantDb { [DbContext(typeof(PersistedGrantDbContext))] - [Migration("20220217183126_Grants")] + [Migration("20220309202509_Grants")] partial class Grants { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -112,9 +112,11 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.PersistedGrant", b => { - b.Property("Key") - .HasMaxLength(200) - .HasColumnType("nvarchar(200)"); + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); b.Property("ClientId") .IsRequired() @@ -139,6 +141,10 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Property("Expiration") .HasColumnType("datetime2"); + b.Property("Key") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + b.Property("SessionId") .HasMaxLength(100) .HasColumnType("nvarchar(100)"); @@ -152,12 +158,16 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasMaxLength(50) .HasColumnType("nvarchar(50)"); - b.HasKey("Key"); + b.HasKey("Id"); b.HasIndex("ConsumedTime"); b.HasIndex("Expiration"); + b.HasIndex("Key") + .IsUnique() + .HasFilter("[Key] IS NOT NULL"); + b.HasIndex("SubjectId", "ClientId", "Type"); b.HasIndex("SubjectId", "SessionId", "Type"); diff --git a/migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220217183126_Grants.cs b/migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220309202509_Grants.cs similarity index 94% rename from migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220217183126_Grants.cs rename to migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220309202509_Grants.cs index 0d8a6ba02..af64aca90 100644 --- a/migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220217183126_Grants.cs +++ b/migrations/IdentityServerDb/Migrations/PersistedGrantDb/20220309202509_Grants.cs @@ -50,7 +50,9 @@ protected override void Up(MigrationBuilder migrationBuilder) name: "PersistedGrants", columns: table => new { - Key = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Key = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: true), Type = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), SubjectId = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: true), SessionId = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: true), @@ -63,7 +65,7 @@ protected override void Up(MigrationBuilder migrationBuilder) }, constraints: table => { - table.PrimaryKey("PK_PersistedGrants", x => x.Key); + table.PrimaryKey("PK_PersistedGrants", x => x.Id); }); migrationBuilder.CreateTable( @@ -113,6 +115,13 @@ protected override void Up(MigrationBuilder migrationBuilder) table: "PersistedGrants", column: "Expiration"); + migrationBuilder.CreateIndex( + name: "IX_PersistedGrants_Key", + table: "PersistedGrants", + column: "Key", + unique: true, + filter: "[Key] IS NOT NULL"); + migrationBuilder.CreateIndex( name: "IX_PersistedGrants_SubjectId_ClientId_Type", table: "PersistedGrants", diff --git a/migrations/IdentityServerDb/Migrations/PersistedGrantDb/PersistedGrantDbContextModelSnapshot.cs b/migrations/IdentityServerDb/Migrations/PersistedGrantDb/PersistedGrantDbContextModelSnapshot.cs index 7dc4611cb..4e579c231 100644 --- a/migrations/IdentityServerDb/Migrations/PersistedGrantDb/PersistedGrantDbContextModelSnapshot.cs +++ b/migrations/IdentityServerDb/Migrations/PersistedGrantDb/PersistedGrantDbContextModelSnapshot.cs @@ -110,9 +110,11 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.PersistedGrant", b => { - b.Property("Key") - .HasMaxLength(200) - .HasColumnType("nvarchar(200)"); + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); b.Property("ClientId") .IsRequired() @@ -137,6 +139,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Expiration") .HasColumnType("datetime2"); + b.Property("Key") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + b.Property("SessionId") .HasMaxLength(100) .HasColumnType("nvarchar(100)"); @@ -150,12 +156,16 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasMaxLength(50) .HasColumnType("nvarchar(50)"); - b.HasKey("Key"); + b.HasKey("Id"); b.HasIndex("ConsumedTime"); b.HasIndex("Expiration"); + b.HasIndex("Key") + .IsUnique() + .HasFilter("[Key] IS NOT NULL"); + b.HasIndex("SubjectId", "ClientId", "Type"); b.HasIndex("SubjectId", "SessionId", "Type"); diff --git a/src/EntityFramework.Storage/Entities/PersistedGrant.cs b/src/EntityFramework.Storage/Entities/PersistedGrant.cs index 608fb1981..679632712 100644 --- a/src/EntityFramework.Storage/Entities/PersistedGrant.cs +++ b/src/EntityFramework.Storage/Entities/PersistedGrant.cs @@ -1,4 +1,4 @@ -// Copyright (c) Duende Software. All rights reserved. +// Copyright (c) Duende Software. All rights reserved. // See LICENSE in the project root for license information. @@ -10,6 +10,7 @@ namespace Duende.IdentityServer.EntityFramework.Entities; public class PersistedGrant { + public int Id { get; set; } public string Key { get; set; } public string Type { get; set; } public string SubjectId { get; set; } diff --git a/src/EntityFramework.Storage/Extensions/ModelBuilderExtensions.cs b/src/EntityFramework.Storage/Extensions/ModelBuilderExtensions.cs index 474d64bb6..84a3d1fd3 100644 --- a/src/EntityFramework.Storage/Extensions/ModelBuilderExtensions.cs +++ b/src/EntityFramework.Storage/Extensions/ModelBuilderExtensions.cs @@ -148,7 +148,7 @@ public static void ConfigurePersistedGrantContext(this ModelBuilder modelBuilder { grant.ToTable(storeOptions.PersistedGrants); - grant.Property(x => x.Key).HasMaxLength(200).ValueGeneratedNever(); + grant.Property(x => x.Key).HasMaxLength(200); grant.Property(x => x.Type).HasMaxLength(50).IsRequired(); grant.Property(x => x.SubjectId).HasMaxLength(200); grant.Property(x => x.SessionId).HasMaxLength(100); @@ -159,8 +159,9 @@ public static void ConfigurePersistedGrantContext(this ModelBuilder modelBuilder // apparently anything over 4K converts to nvarchar(max) on SqlServer grant.Property(x => x.Data).HasMaxLength(50000).IsRequired(); - grant.HasKey(x => x.Key); - + grant.HasKey(x => x.Id); + + grant.HasIndex(x => x.Key).IsUnique(); grant.HasIndex(x => new { x.SubjectId, x.ClientId, x.Type }); grant.HasIndex(x => new { x.SubjectId, x.SessionId, x.Type }); grant.HasIndex(x => x.Expiration);