diff --git a/openid-connect-server-webapp/src/main/resources/db/tables/psql_database_tables.sql b/openid-connect-server-webapp/src/main/resources/db/tables/psql_database_tables.sql
new file mode 100644
index 000000000..782c18f07
--- /dev/null
+++ b/openid-connect-server-webapp/src/main/resources/db/tables/psql_database_tables.sql
@@ -0,0 +1,278 @@
+--
+-- Tables for OIDC Server functionality, PostgreSQL
+--
+
+CREATE TABLE IF NOT EXISTS access_token (
+ id SERIAL PRIMARY KEY,
+ token_value VARCHAR(4096),
+ expiration TIMESTAMP,
+ token_type VARCHAR(256),
+ refresh_token_id BIGINT,
+ client_id BIGINT,
+ auth_holder_id BIGINT,
+ id_token_id BIGINT,
+ approved_site_id BIGINT
+);
+
+CREATE TABLE IF NOT EXISTS access_token_permissions (
+ access_token_id BIGINT NOT NULL,
+ permission_id BIGINT NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS address (
+ id SERIAL PRIMARY KEY,
+ formatted VARCHAR(256),
+ street_address VARCHAR(256),
+ locality VARCHAR(256),
+ region VARCHAR(256),
+ postal_code VARCHAR(256),
+ country VARCHAR(256)
+);
+
+CREATE TABLE IF NOT EXISTS approved_site (
+ id SERIAL PRIMARY KEY,
+ user_id VARCHAR(256),
+ client_id VARCHAR(256),
+ creation_date TIMESTAMP,
+ access_date TIMESTAMP,
+ timeout_date TIMESTAMP,
+ whitelisted_site_id BIGINT
+);
+
+CREATE TABLE IF NOT EXISTS approved_site_scope (
+ owner_id BIGINT,
+ scope VARCHAR(256)
+);
+
+CREATE TABLE IF NOT EXISTS authentication_holder (
+ id SERIAL PRIMARY KEY,
+ authentication LONGVARBINARY
+);
+
+CREATE TABLE IF NOT EXISTS client_authority (
+ owner_id BIGINT,
+ authority LONGVARBINARY
+);
+
+CREATE TABLE IF NOT EXISTS authorization_code (
+ id SERIAL PRIMARY KEY,
+ code VARCHAR(256),
+ auth_holder_id BIGINT,
+ expiration TIMESTAMP
+);
+
+CREATE TABLE IF NOT EXISTS client_grant_type (
+ owner_id BIGINT,
+ grant_type VARCHAR(2000)
+);
+
+CREATE TABLE IF NOT EXISTS client_response_type (
+ owner_id BIGINT,
+ response_type VARCHAR(2000)
+);
+
+CREATE TABLE IF NOT EXISTS blacklisted_site (
+ id SERIAL PRIMARY KEY,
+ uri VARCHAR(2048)
+);
+
+CREATE TABLE IF NOT EXISTS client_details (
+ id SERIAL PRIMARY KEY,
+
+ client_description VARCHAR(1024),
+ reuse_refresh_tokens BOOLEAN DEFAULT true NOT NULL,
+ dynamically_registered BOOLEAN DEFAULT false NOT NULL,
+ allow_introspection BOOLEAN DEFAULT false NOT NULL,
+ id_token_validity_seconds BIGINT DEFAULT 600 NOT NULL,
+
+ client_id VARCHAR(256),
+ client_secret VARCHAR(2048),
+ access_token_validity_seconds BIGINT,
+ refresh_token_validity_seconds BIGINT,
+
+ application_type VARCHAR(256),
+ client_name VARCHAR(256),
+ token_endpoint_auth_method VARCHAR(256),
+ subject_type VARCHAR(256),
+
+ logo_uri VARCHAR(2048),
+ policy_uri VARCHAR(2048),
+ client_uri VARCHAR(2048),
+ tos_uri VARCHAR(2048),
+
+ jwks_uri VARCHAR(2048),
+ sector_identifier_uri VARCHAR(2048),
+
+ request_object_signing_alg VARCHAR(256),
+
+ user_info_signed_response_alg VARCHAR(256),
+ user_info_encrypted_response_alg VARCHAR(256),
+ user_info_encrypted_response_enc VARCHAR(256),
+
+ id_token_signed_response_alg VARCHAR(256),
+ id_token_encrypted_response_alg VARCHAR(256),
+ id_token_encrypted_response_enc VARCHAR(256),
+
+ token_endpoint_auth_signing_alg VARCHAR(256),
+
+ default_max_age BIGINT,
+ require_auth_time BOOLEAN,
+ created_at TIMESTAMP,
+ initiate_login_uri VARCHAR(2048),
+ post_logout_redirect_uri VARCHAR(2048),
+ UNIQUE (client_id)
+);
+
+CREATE TABLE IF NOT EXISTS client_request_uri (
+ owner_id BIGINT,
+ request_uri VARCHAR(2000)
+);
+
+CREATE TABLE IF NOT EXISTS client_post_logout_redirect_uri (
+ owner_id BIGINT,
+ post_logout_redirect_uri VARCHAR(2000)
+);
+
+CREATE TABLE IF NOT EXISTS client_default_acr_value (
+ owner_id BIGINT,
+ default_acr_value VARCHAR(2000)
+);
+
+CREATE TABLE IF NOT EXISTS client_contact (
+ owner_id BIGINT,
+ contact VARCHAR(256)
+);
+
+CREATE TABLE IF NOT EXISTS client_redirect_uri (
+ owner_id BIGINT,
+ redirect_uri VARCHAR(2048)
+);
+
+CREATE TABLE IF NOT EXISTS refresh_token (
+ id SERIAL PRIMARY KEY,
+ token_value VARCHAR(4096),
+ expiration TIMESTAMP,
+ auth_holder_id BIGINT,
+ client_id BIGINT
+);
+
+CREATE TABLE IF NOT EXISTS client_resource (
+ owner_id BIGINT,
+ resource_id VARCHAR(256)
+);
+
+CREATE TABLE IF NOT EXISTS client_scope (
+ owner_id BIGINT,
+ scope VARCHAR(2048)
+);
+
+CREATE TABLE IF NOT EXISTS token_scope (
+ owner_id BIGINT,
+ scope VARCHAR(2048)
+);
+
+CREATE TABLE IF NOT EXISTS system_scope (
+ id SERIAL PRIMARY KEY,
+ scope VARCHAR(256) NOT NULL,
+ description VARCHAR(4096),
+ icon VARCHAR(256),
+ restricted BOOLEAN DEFAULT false NOT NULL,
+ default_scope BOOLEAN DEFAULT false NOT NULL,
+ structured BOOLEAN DEFAULT false NOT NULL,
+ structured_param_description VARCHAR(256),
+ UNIQUE (scope)
+);
+
+CREATE TABLE IF NOT EXISTS user_info (
+ id SERIAL PRIMARY KEY,
+ sub VARCHAR(256),
+ preferred_username VARCHAR(256),
+ name VARCHAR(256),
+ given_name VARCHAR(256),
+ family_name VARCHAR(256),
+ middle_name VARCHAR(256),
+ nickname VARCHAR(256),
+ profile VARCHAR(256),
+ picture VARCHAR(256),
+ website VARCHAR(256),
+ email VARCHAR(256),
+ email_verified BOOLEAN,
+ gender VARCHAR(256),
+ zone_info VARCHAR(256),
+ locale VARCHAR(256),
+ phone_number VARCHAR(256),
+ phone_number_verified BOOLEAN,
+ address_id VARCHAR(256),
+ updated_time VARCHAR(256),
+ birthdate VARCHAR(256)
+);
+
+CREATE TABLE IF NOT EXISTS whitelisted_site (
+ id SERIAL PRIMARY KEY,
+ creator_user_id VARCHAR(256),
+ client_id VARCHAR(256)
+);
+
+CREATE TABLE IF NOT EXISTS whitelisted_site_scope (
+ owner_id BIGINT,
+ scope VARCHAR(256)
+);
+
+CREATE TABLE IF NOT EXISTS pairwise_identifier (
+ id SERIAL PRIMARY KEY,
+ identifier VARCHAR(256),
+ sub VARCHAR(256),
+ sector_identifier VARCHAR(2048)
+);
+
+CREATE TABLE IF NOT EXISTS resource_set (
+ id SERIAL PRIMARY KEY,
+ name VARCHAR(1024) NOT NULL,
+ uri VARCHAR(1024),
+ icon_uri VARCHAR(1024),
+ rs_type VARCHAR(256),
+ owner VARCHAR(256) NOT NULL,
+ client_id VARCHAR(256)
+);
+
+CREATE TABLE IF NOT EXISTS resource_set_scope (
+ owner_id BIGINT NOT NULL,
+ scope VARCHAR(256) NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS permission_ticket (
+ id SERIAL PRIMARY KEY,
+ ticket VARCHAR(256) NOT NULL,
+ permission_id BIGINT NOT NULL,
+ expiration TIMESTAMP
+);
+
+CREATE TABLE IF NOT EXISTS permission (
+ id SERIAL PRIMARY KEY,
+ resource_set_id BIGINT NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS permission_scope (
+ owner_id BIGINT NOT NULL,
+ scope VARCHAR(256) NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS claim (
+ id SERIAL PRIMARY KEY,
+ name VARCHAR(256),
+ friendly_name VARCHAR(1024),
+ claim_type VARCHAR(1024),
+ claim_value VARCHAR(1024),
+ resource_set_id BIGINT,
+ permission_ticket_id BIGINT
+);
+
+CREATE TABLE IF NOT EXISTS claim_token_format (
+ owner_id BIGINT NOT NULL,
+ claim_token_format VARCHAR(1024)
+);
+
+CREATE TABLE IF NOT EXISTS claim_issuer (
+ owner_id BIGINT NOT NULL,
+ issuer VARCHAR(1024)
+);
diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/data-context.xml b/openid-connect-server-webapp/src/main/webapp/WEB-INF/data-context.xml
index e5de83c8c..663649b39 100644
--- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/data-context.xml
+++ b/openid-connect-server-webapp/src/main/webapp/WEB-INF/data-context.xml
@@ -26,9 +26,9 @@
-
+
-
+
@@ -41,7 +41,7 @@
-
+
@@ -63,4 +63,20 @@
-->
+
+
+
diff --git a/pom.xml b/pom.xml
index 399ddb56f..11cda2aac 100644
--- a/pom.xml
+++ b/pom.xml
@@ -356,6 +356,11 @@
hsqldb
2.2.9
+
+ org.postgresql
+ postgresql
+ 9.4-1201-jdbc4
+
org.eclipse.persistence
org.eclipse.persistence.jpa