Database Gen Script: IdentityServer4 DatabaseΒΆ

ID4 needs data to configure the Client Applications and their Authorization Flows.

First create the IdentityServer4 Database, then run the following script to setup a Database Login Account:

USE [master]
GO
CREATE LOGIN [ID4SystemUser] WITH PASSWORD=N'p@ssw0rd',
    DEFAULT_DATABASE=[master],
    DEFAULT_LANGUAGE=[us_english],
    CHECK_EXPIRATION=ON,
    CHECK_POLICY=ON
GO

Next run this script to create all database objects:

USE [IdentityServer4]
GO
CREATE USER [ID4SystemUser] FOR LOGIN [ID4SystemUser]
    WITH DEFAULT_SCHEMA=[dbo]
GO
ALTER ROLE [db_datareader] ADD MEMBER [ID4SystemUser]
GO
ALTER ROLE [db_datawriter] ADD MEMBER [ID4SystemUser]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ApiClaims](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ApiResourceId] [int] NOT NULL,
    [Type] [nvarchar](200) NOT NULL,
CONSTRAINT [PK_ApiClaims] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ApiResources](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Description] [nvarchar](1000) NULL,
    [DisplayName] [nvarchar](200) NULL,
    [Enabled] [bit] NOT NULL,
    [Name] [nvarchar](200) NOT NULL,
CONSTRAINT [PK_ApiResources] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ApiScopeClaims](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ApiScopeId] [int] NOT NULL,
    [Type] [nvarchar](200) NOT NULL,
CONSTRAINT [PK_ApiScopeClaims] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ApiScopes](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ApiResourceId] [int] NOT NULL,
    [Description] [nvarchar](1000) NULL,
    [DisplayName] [nvarchar](200) NULL,
    [Emphasize] [bit] NOT NULL,
    [Name] [nvarchar](200) NOT NULL,
    [Required] [bit] NOT NULL,
    [ShowInDiscoveryDocument] [bit] NOT NULL,
CONSTRAINT [PK_ApiScopes] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ApiSecrets](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ApiResourceId] [int] NOT NULL,
    [Description] [nvarchar](1000) NULL,
    [Expiration] [datetime2](7) NULL,
    [Type] [nvarchar](250) NULL,
    [Value] [nvarchar](2000) NULL,
CONSTRAINT [PK_ApiSecrets] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ClientClaims](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ClientId] [int] NOT NULL,
    [Type] [nvarchar](250) NOT NULL,
    [Value] [nvarchar](250) NOT NULL,
CONSTRAINT [PK_ClientClaims] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ClientCorsOrigins](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ClientId] [int] NOT NULL,
    [Origin] [nvarchar](150) NOT NULL,
CONSTRAINT [PK_ClientCorsOrigins] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ClientGrantTypes](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ClientId] [int] NOT NULL,
    [GrantType] [nvarchar](250) NOT NULL,
CONSTRAINT [PK_ClientGrantTypes] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ClientIdPRestrictions](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ClientId] [int] NOT NULL,
    [Provider] [nvarchar](200) NOT NULL,
CONSTRAINT [PK_ClientIdPRestrictions] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ClientPostLogoutRedirectUris](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ClientId] [int] NOT NULL,
    [PostLogoutRedirectUri] [nvarchar](2000) NOT NULL,
CONSTRAINT [PK_ClientPostLogoutRedirectUris] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ClientRedirectUris](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ClientId] [int] NOT NULL,
    [RedirectUri] [nvarchar](2000) NOT NULL,
CONSTRAINT [PK_ClientRedirectUris] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Clients](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [AbsoluteRefreshTokenLifetime] [int] NOT NULL,
    [AccessTokenLifetime] [int] NOT NULL,
    [AccessTokenType] [int] NOT NULL,
    [AllowAccessTokensViaBrowser] [bit] NOT NULL,
    [AllowOfflineAccess] [bit] NOT NULL,
    [AllowPlainTextPkce] [bit] NOT NULL,
    [AllowRememberConsent] [bit] NOT NULL,
    [AlwaysIncludeUserClaimsInIdToken] [bit] NOT NULL,
    [AlwaysSendClientClaims] [bit] NOT NULL,
    [AuthorizationCodeLifetime] [int] NOT NULL,
    [ClientId] [nvarchar](200) NOT NULL,
    [ClientName] [nvarchar](200) NULL,
    [ClientUri] [nvarchar](2000) NULL,
    [EnableLocalLogin] [bit] NOT NULL,
    [Enabled] [bit] NOT NULL,
    [IdentityTokenLifetime] [int] NOT NULL,
    [IncludeJwtId] [bit] NOT NULL,
    [LogoUri] [nvarchar](max) NULL,
    [LogoutSessionRequired] [bit] NOT NULL,
    [LogoutUri] [nvarchar](max) NULL,
    [PrefixClientClaims] [bit] NOT NULL,
    [ProtocolType] [nvarchar](200) NOT NULL,
    [RefreshTokenExpiration] [int] NOT NULL,
    [RefreshTokenUsage] [int] NOT NULL,
    [RequireClientSecret] [bit] NOT NULL,
    [RequireConsent] [bit] NOT NULL,
    [RequirePkce] [bit] NOT NULL,
    [SlidingRefreshTokenLifetime] [int] NOT NULL,
    [UpdateAccessTokenClaimsOnRefresh] [bit] NOT NULL,
CONSTRAINT [PK_Clients] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ClientScopes](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ClientId] [int] NOT NULL,
    [Scope] [nvarchar](200) NOT NULL,
CONSTRAINT [PK_ClientScopes] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ClientSecrets](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ClientId] [int] NOT NULL,
    [Description] [nvarchar](2000) NULL,
    [Expiration] [datetime2](7) NULL,
    [Type] [nvarchar](250) NULL,
    [Value] [nvarchar](2000) NOT NULL,
CONSTRAINT [PK_ClientSecrets] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[IdentityClaims](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [IdentityResourceId] [int] NOT NULL,
    [Type] [nvarchar](200) NOT NULL,
CONSTRAINT [PK_IdentityClaims] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[IdentityResources](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Description] [nvarchar](1000) NULL,
    [DisplayName] [nvarchar](200) NULL,
    [Emphasize] [bit] NOT NULL,
    [Enabled] [bit] NOT NULL,
    [Name] [nvarchar](200) NOT NULL,
    [Required] [bit] NOT NULL,
    [ShowInDiscoveryDocument] [bit] NOT NULL,
CONSTRAINT [PK_IdentityResources] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[PersistedGrants](
    [Key] [nvarchar](200) NOT NULL,
    [ClientId] [nvarchar](200) NOT NULL,
    [CreationTime] [datetime2](7) NOT NULL,
    [Data] [nvarchar](max) NOT NULL,
    [Expiration] [datetime2](7) NULL,
    [SubjectId] [nvarchar](200) NULL,
    [Type] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_PersistedGrants] PRIMARY KEY CLUSTERED
(
    [Key] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[ApiClaims]  WITH CHECK ADD
    CONSTRAINT [FK_ApiClaims_ApiResources_ApiResourceId]
    FOREIGN KEY([ApiResourceId])
    REFERENCES [dbo].[ApiResources] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ApiClaims] CHECK
    CONSTRAINT [FK_ApiClaims_ApiResources_ApiResourceId]
GO
ALTER TABLE [dbo].[ApiScopeClaims]  WITH CHECK ADD
    CONSTRAINT [FK_ApiScopeClaims_ApiScopes_ApiScopeId]
    FOREIGN KEY([ApiScopeId])
    REFERENCES [dbo].[ApiScopes] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ApiScopeClaims] CHECK
    CONSTRAINT [FK_ApiScopeClaims_ApiScopes_ApiScopeId]
GO
ALTER TABLE [dbo].[ApiScopes]  WITH CHECK ADD
    CONSTRAINT [FK_ApiScopes_ApiResources_ApiResourceId]
    FOREIGN KEY([ApiResourceId])
    REFERENCES [dbo].[ApiResources] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ApiScopes] CHECK
    CONSTRAINT [FK_ApiScopes_ApiResources_ApiResourceId]
GO
ALTER TABLE [dbo].[ApiSecrets]  WITH CHECK ADD
    CONSTRAINT [FK_ApiSecrets_ApiResources_ApiResourceId]
    FOREIGN KEY([ApiResourceId])
    REFERENCES [dbo].[ApiResources] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ApiSecrets] CHECK
    CONSTRAINT [FK_ApiSecrets_ApiResources_ApiResourceId]
GO
ALTER TABLE [dbo].[ClientClaims]  WITH CHECK ADD
    CONSTRAINT [FK_ClientClaims_Clients_ClientId]
    FOREIGN KEY([ClientId])
    REFERENCES [dbo].[Clients] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ClientClaims] CHECK
    CONSTRAINT [FK_ClientClaims_Clients_ClientId]
GO
ALTER TABLE [dbo].[ClientCorsOrigins]  WITH CHECK ADD
    CONSTRAINT [FK_ClientCorsOrigins_Clients_ClientId]
    FOREIGN KEY([ClientId])
    REFERENCES [dbo].[Clients] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ClientCorsOrigins] CHECK
    CONSTRAINT [FK_ClientCorsOrigins_Clients_ClientId]
GO
ALTER TABLE [dbo].[ClientGrantTypes]  WITH CHECK ADD
    CONSTRAINT [FK_ClientGrantTypes_Clients_ClientId]
    FOREIGN KEY([ClientId])
    REFERENCES [dbo].[Clients] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ClientGrantTypes] CHECK
    CONSTRAINT [FK_ClientGrantTypes_Clients_ClientId]
GO
ALTER TABLE [dbo].[ClientIdPRestrictions]  WITH CHECK ADD
    CONSTRAINT [FK_ClientIdPRestrictions_Clients_ClientId]
    FOREIGN KEY([ClientId])
    REFERENCES [dbo].[Clients] ([Id])
    ON DELETE CASCADE
GO
    ALTER TABLE [dbo].[ClientIdPRestrictions] CHECK
    CONSTRAINT [FK_ClientIdPRestrictions_Clients_ClientId]
GO
ALTER TABLE [dbo].[ClientPostLogoutRedirectUris]  WITH CHECK ADD
    CONSTRAINT [FK_ClientPostLogoutRedirectUris_Clients_ClientId]
    FOREIGN KEY([ClientId])
    REFERENCES [dbo].[Clients] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ClientPostLogoutRedirectUris] CHECK
    CONSTRAINT [FK_ClientPostLogoutRedirectUris_Clients_ClientId]
GO
ALTER TABLE [dbo].[ClientRedirectUris]  WITH CHECK ADD
    CONSTRAINT [FK_ClientRedirectUris_Clients_ClientId]
    FOREIGN KEY([ClientId])
    REFERENCES [dbo].[Clients] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ClientRedirectUris] CHECK
    CONSTRAINT [FK_ClientRedirectUris_Clients_ClientId]
GO
ALTER TABLE [dbo].[ClientScopes]  WITH CHECK ADD
    CONSTRAINT [FK_ClientScopes_Clients_ClientId]
    FOREIGN KEY([ClientId])
    REFERENCES [dbo].[Clients] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ClientScopes] CHECK
    CONSTRAINT [FK_ClientScopes_Clients_ClientId]
GO
ALTER TABLE [dbo].[ClientSecrets]  WITH CHECK ADD
    CONSTRAINT [FK_ClientSecrets_Clients_ClientId]
    FOREIGN KEY([ClientId])
    REFERENCES [dbo].[Clients] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ClientSecrets] CHECK
    CONSTRAINT [FK_ClientSecrets_Clients_ClientId]
GO
ALTER TABLE [dbo].[IdentityClaims]  WITH CHECK ADD
    CONSTRAINT [FK_IdentityClaims_IdentityResources_IdentityResourceId]
    FOREIGN KEY([IdentityResourceId])
    REFERENCES [dbo].[IdentityResources] ([Id])
    ON DELETE CASCADE
GO
ALTER TABLE [dbo].[IdentityClaims] CHECK
    CONSTRAINT [FK_IdentityClaims_IdentityResources_IdentityResourceId]
GO

GRANT SELECT ON [dbo].[ApiClaims] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ApiResources] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ApiScopeClaims] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ApiScopes] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ApiSecrets] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ClientClaims] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ClientCorsOrigins] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ClientGrantTypes] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ClientIdPRestrictions] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ClientPostLogoutRedirectUris] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ClientRedirectUris] TO ID4SystemUser;
GRANT SELECT ON [dbo].[Clients] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ClientScopes] TO ID4SystemUser;
GRANT SELECT ON [dbo].[ClientSecrets] TO ID4SystemUser;
GRANT SELECT ON [dbo].[IdentityClaims] TO ID4SystemUser;
GRANT SELECT ON [dbo].[IdentityResources] TO ID4SystemUser;
GRANT SELECT, INSERT, DELETE ON [dbo].[PersistedGrants] TO ID4SystemUser;